骨干路由器:首先等待数据被获取

2024-02-09

我想我不太了解骨干路由器的正确使用背后的想法。这是我得到的:

我在页面加载时从服务器获取一些数据,然后将其打包到模型和集合中。这些模型和系列的数量是无限的。我想使用路由器能够从一开始就直接渲染某个集合的视图。

问题是:骨干路由器启动较早,并且由于我要求它访问某个视图并触发其render行动,它不能这样做,因为这些视图尚未创建。这意味着我实际上必须在获取完成后启动我的路线。

我不知道这是否是正确的方法,但我想到的唯一想法是:

  1. 包装路由定义和Backbone.history.start();进入一个单独的顶级可访问函数(即准备稍后手动调用它)。
  2. 运行该函数作为success我的收藏的回调fetch()
  3. 这些集合的数量是未知的,我也无法知道何时全部获取,并且我不想多次启动路线。所以我利用_.defer() and _.once().

这可行,但看起来确实很奇怪:

Routers:

    window.startRoutes = _.once(function() {

        var AccountPage = Backbone.Router.extend({

          routes: {
            'set/:id': 'renderSet',
          },

          renderSet: function(setId) {

              /** … **/

              // Call the rendering method on the respective CardView
              CardsViews[setId].render();

          }

        });

        var AccountPageRouter = new AccountPage;

        Backbone.history.start();

    });

收藏:

window.CardsCollection = Backbone.Collection.extend({

    model: Card,

    initialize: function(params) {

        /** … **/

        // Get the initial data
        this.fetch({success: function() {
            _.defer(startRoutes);
        }});

    },

});

所以我的问题是……我做得对吗?或者有更好的方法来做到这一点(必须是)?


您可以提前定义您的路由器;在您调用 Backbone.History.start() 之前它不会执行任何操作。

您可以在集合上绑定“重置”事件来启动历史记录,如下所示:

my_collection.bind("reset", _.once(Backbone.History.start, Backbone.History))

然后,当您的集合完全加载时,路由器将开始执行操作。我不确定这是否正是您正在寻找的(因为您提到拥有可变数量的集合)。

我也有类似的情况,只不过我在开始路由之前提前知道要加载哪些集合。我向路由器添加了一个 startAfter 方法,如下所示:

  window.Workspace = new (Backbone.Router.extend({
    . . .
    startAfter: function(collections) {
      // Start history when required collections are loaded
      var start = _.after(collections.length, _.once(function(){
        Backbone.history.start()
      }))
      _.each(collections, function(collection) {
        collection.bind('reset', start, Backbone.history)
      });
    }
  }));

然后在我设置好我的收藏之后

  Workspace.startAfter([collection_a, collection_b, ...])

这也可以适应独立模型,尽管我认为您需要绑定到“重置”事件以外的其他内容。

我很高兴阅读您的示例代码,_.once 和 _.defer 的使用为我指明了正确的方向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

骨干路由器:首先等待数据被获取 的相关文章

  • Backbone.js / Marionette.js 中的路由 - 无主题标签、路由列表和子路由器

    我对 Backbone js Marionette js 中的路由有三个问题 1 如何获取我的应用程序路由器已注册的所有路由的列表 例如对于 Express js 在 Node js 中 它将是app routes 我尝试对 Backbon
  • 使用主干渲染引导模式

    我认为代码可以更好地解释我的问题 风景 App Views ErrorModal Backbone View extend template window template errorModal render function this e
  • 在运行时添加路由 (ExpressJs)

    我想在运行时添加路线 我读到这是可能的 但我不太确定如何 目前我使用以下代码 var app express function CreateRoute route app use route require routes customcha
  • Ruby On Rails 更新 Heroku 动态路由

    我有一个使用应用程序范围的 slugs 的应用程序 使用懒惰的宝石 https github com RISCfuture slugalicious与 Sluggable 表 并使用以下代码路由到这些 slugs Slugs begin S
  • 需要帮助了解主干中嵌套视图的基础知识

    我一直在阅读有关backbone js 中嵌套视图的大量内容 并且了解其中的很多内容 但仍然令我困惑的一件事是 如果我的应用程序有一个 shell 视图 其中包含页面导航 页脚等子视图 这些子视图在使用应用程序的过程中不会改变 那么我是否需
  • 在 asp.net mvc url 中格式化查询字符串的最佳方法?

    我注意到 如果您通过 asp net mvc 发送查询字符串路由值 您最终会将所有空格编码为 20 因为我希望将空格转换为 号 所以覆盖此格式的最佳方法是什么 我正在考虑也许使用自定义 Route 对象或派生自 IRouteHandler
  • 如何在 WordPress 中创建“路线”?

    为了我自己的理智 我正在尝试为 ajax api 创建一条路由 如下所示 api
  • 使用 Rivets.js 迭代 Backbone.js 模型的集合?

    我在用着铆钉 js http rivetsjs com 对于 Backbone 项目中的两个双向数据绑定 并且希望实现迭代绑定 文档表明迭代绑定是可能的 但没有可用的示例 我正在使用一个简单的 Rails API 将 JSON 发送到客户端
  • Docker nuget连接超时

    尝试利用官方jetbrains teamcity agentKubernetes 上的图像 我已经设法在 Docker 中运行 Docker 但尝试使用以下命令构建 ASP NET Core 映像docker build命令失败于dotne
  • 将自定义路由添加到 Rails 应用程序

    我已经读过导轨指南 http guides rubyonrails org routing html 我想要设置的是路由到 配置文件 控制器的以下路由 GET profiles charities 应显示所有慈善机构 GET profile
  • Flutter:go_router如何将多个参数传递到其他屏幕?

    在普通颤动中 我用来将多个参数传递到其他屏幕 如下所示 Navigator of context push MaterialPageRoute builder gt CatalogFilterPage list list bloc bloc
  • 如何在 Angular i18n 路由器模块中使用 LOCALE_ID

    我正在使用 Angular 的 i18n 设置构建一个小型 Angular 应用程序 除了 url 路径和 slugs 的翻译之外 一切都工作正常 我尝试了一种可能的解决方案 为每种语言提供一个路由模块 如此处所述 但这不起作用 我以为我可
  • 为什么不重新评估 Binding.scala 路由器?

    我正在尝试通过 Binding scala 为个人项目构建通用路由器 我定义了一个PageState trait sealed trait WhistState def text String def hash String def ren
  • 如何有一个后备路由来捕获backbone.js中的未知页面

    我设置了一组如下所示的路线 routes home home home page home 我想知道的是 如何配置路由 以便如果用户请求未知页面 我可以轻松重定向到静态 404 html 页面 在您的路由器中 例如前两条路由 routes
  • 如何在 ASP.Net MVC 中执行 301 永久重定向路由

    如何在 ASP NET MVC 中执行 HTTP 301 永久重定向路由 创建一个继承自 ActionResult 的类 public class PermanentRedirectResult ActionResult public st
  • Backbone Marionette CompositeView 排序列表 - 在添加时呈现额外的模型

    这是小提琴 http jsfiddle net QhQ8D 10 http jsfiddle net QhQ8D 10 代码在下面 制作一个聊天应用程序 需要一个排序的 连接的用户列表 名称上带有比较器的图形集合连接到 CompositeV
  • 如何从引擎覆盖 Rails 应用程序路由?

    我有一个 Rails 应用程序 我正在尝试将 Rails 引擎集成到其中 主机应用程序有一些捕获所有路由 magic urls match gt admin rendering show match path edit gt admin r
  • Angular 2 获取当前路线

    所以我需要以某种方式检查我是否在主页上执行某些操作 而在其他页面上则不执行此操作 该组件也在所有页面上导入 如果我在主页上 如何检测该组件 Thanks 尝试这个 import Router from angular router expo
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j
  • Rails 资源单数还是复数?

    我有一条搜索路线 我想将其设为单数 但是当我指定单数路线时 它仍然会生成复数控制器路线 这是应该的样子吗 resource search Gives me search POST search format action gt create

随机推荐

  • 具有默认值的 readline

    我可以使用以下命令将用户输入限制为 5 个字符GNU 阅读线 https cnswww cns cwru edu php chet readline rltop html include
  • Angular 2+ 错误:找不到名称“gapi”

    基本上 当我调用 google Analytics api 获取核心报告数据时 我收到以下错误 它可以在我的本地主机服务器上运行 但是当我尝试部署该应用程序时 它对我来说失败了 请告知如何在 angular2 中导入 gapi 变量 非常感
  • Angular:如何将字符串发送到注入服务?

    我创建了 CRUD 任务的通用服务 该服务通过 DI 依赖注入 使用 HttpClient 但我需要在服务的构造函数中通知另一个值 如何实现 因为当我在类的构造函数中定义将使用 DI 使用 CRUD 服务时 无法将参数传递给构造函数 下面是
  • 对数字中的数字求和的最快方法

    给定一个很大的数字 例如9223372036854775807 Int64 MaxValue 对数字求和的最快方法是什么 目前我正在 ToStringing 并将每个字符重新解析为int num ToString Sum c gt int
  • scala 解析器组合器 stackoverflow 递归

    以下代码示例在解析深度嵌套在括号中的表达式时由于堆栈溢出而崩溃 解析器组合器是标准库的一部分 有没有办法利用图书馆来避免这种情况 我不是在问它崩溃的原因 而是在问处理标准库的正确方法 解析 1 1 code import scala uti
  • 连接到另一个小部件的事件

    这很可能是一个重复的问题 但我必须问它 因为其他答案对我的情况没有帮助 因为我是 pyqt 的新手 几天前从 tkinter 切换过来 我想知道是否可以连接到这样的小部件的事件 self lineEdit QtGui QLineEdit s
  • 使用socket.io将数据从flash发送到node.js服务器

    我在node js中有一个简单的基于socket io的服务器 它监听端口81中的套接字 例如 我在用 Javascript 编写的客户端之间连接和传递数据没有问题 但经过多次尝试后 我无法让我的 Flash 应用程序连接到服务器并向其传递
  • Yii2 --- PHP 注意 'yii\base\ErrorException' 并显示消息 'unserialize(): 偏移量 8189 of 8192 字节时出错'

    PHP Notice yii base ErrorException with message unserialize Error at offset 8189 of 8192 bytes in C xampp htdocs final a
  • ImageView 中带圆角的位图

    我有一个 ImageView 我想用它来制作它rounded corners 我用这个
  • 如何在我们的应用程序中打开短信设置Activity?

    在下面的代码中我只能打开撰写短信 我想在不按下选项菜单的情况下打开短信设置活动 String SMS MIME TYPE vnd android dir mms sms Intent defineIntent new Intent Inte
  • WPF 中的多语言[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您能推荐一种为 WPF 应用程序实现多语言系统的好方法吗 我现在使用的方法涉及 XML 类和 xaml 扩展 它在大多数情况下工作得很
  • 如何在运行时向 FireMonkey 的 TreeView 添加节点

    我在在线文档或 Delphi XE2 附带的演示中找不到任何示例 用于将节点添加到FMX TreeView TTreeView http docwiki embarcadero com Libraries XE2 en FMX TreeVi
  • WebLogic负载均衡

    我目前正在开发一个受 WebLogic 集群环境支持的项目 我已经成功设置了集群 但现在我想要一个负载平衡解决方案 目前 仅出于测试目的 我正在使用 WebLogic 的HttpClusterServlet with 循环赛负载均衡 是否有
  • 如何在不先读取整个图像的情况下就地缩放流式位图?

    我有一个图像密集型的 Android 应用程序 我目前正在使用Bitmap createScaledBitmap http developer android com reference android graphics Bitmap ht
  • 在 C# 中使用 LINQ 进行字典操作

    我有一本像这样的字典 Dictionary
  • 拥有两个 XML 标签的网站有什么优势?

    我访问了 StarCraft2 网站并决定查看他们的源代码并看到了以下内容
  • 单击表格复选框时不打开新页面

    我有这样的 JavaScript 当我单击表格行时 它会打开新页面 document ready function table id dataTable find tbody on click tr function this find a
  • 在android中显示像gmail一样的弹出窗口[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 多对多字段上的 order_by 会导致查询集中出现重复条目

    我正在尝试执行基于 m2m 字段的 order by 但它最终会在我的查询集中创建重复的条目 我一直在搜索 django 文档和有关堆栈交换的相关问题 但我一直无法想出任何解决方案 Models class WorkOrder models
  • 骨干路由器:首先等待数据被获取

    我想我不太了解骨干路由器的正确使用背后的想法 这是我得到的 我在页面加载时从服务器获取一些数据 然后将其打包到模型和集合中 这些模型和系列的数量是无限的 我想使用路由器能够从一开始就直接渲染某个集合的视图 问题是 骨干路由器启动较早 并且由