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

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(使用前将#替换为@)

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

  • 渲染闭合的 Marionette 视图

    关闭的 Marionette 视图在再次渲染时不应该重新委托定义的事件 事件 modelEvents CollectionEvents 吗 似乎我必须在关闭并重新渲染视图后手动调用 delegateEvents 否则视图将无法按预期工作 h
  • Svelte 路线给我 404

    我在 Svelte 中为我的应用程序创建了一个简单的路由器 如果我从导航栏访问链接 它就可以工作 如果我重新加载页面 它会给我 404 为什么
  • Angular 2 错误:无法解析“RouteParams”的所有参数

    尝试使用 RouteParams 获取查询字符串参数 但我只是收到错误 无法解析 RouteParams 的所有参数 确保所有 参数用 Inject 修饰或具有有效类型 注释并且 RouteParams 用 Injectable 修饰 an
  • jQuery PUT ajax 请求不起作用

    我正在尝试在 couchdb 中保存 Backbone 模型 因此我已经覆盖了save向 couchdb 发出 ajax 请求的方法 ajax type PUT url http 127 0 0 1 5984 movies this get
  • 如何提取 Backbone 集合的属性

    我想从 Backbone 集合创建一个特定属性值的数组 var days select this collection models function model return model attributes type session d
  • 如何检查侧边栏视图是否已经在主干中渲染?

    通常 用户通过主页进入网站 然后我在那里渲染侧边栏视图 接下来 用户单击链接 路由器呈现另一个视图并替换原始内容视图 侧边栏视图不会重新渲染 当用户在子页面上单击刷新时 侧边栏不会呈现 如何检查视图是否存在并且已渲染 划分责任并坚持下去 不
  • Angular 和 Node JS 中的路由问题 [Angular]

    我有角度js的问题 我创建了 login html 和 home html 成功登录后我想将页面更改为 home html 我的路由不起作用 默认 url 是 localhost angular 我尝试路由 realpath 即 local
  • backscore.js 和 underscore.js CDN 推荐吗?

    是否有backbone js和underscore js的CDN源可以在我们的项目中使用 http www cdnjs com http www cdnjs com托管许多不太流行的 JavaScript 框架 包括 主干 js quest
  • Laravel 5.1 - 获取当前路线

    我正在开发一个为每个视图自动获取资源 css js 的函数 所以它工作得很好 让我们说 http mywebsite com displayitems http mywebsite com displayitems home about 等
  • 为什么此 DirectoryInfo 比较不起作用? [复制]

    这个问题在这里已经有答案了 可能的重复 如何检查2个DirectoryInfo对象是否指向同一个目录 https stackoverflow com questions 1794025 how to check whether 2 dire
  • 了解路由表条目

    我想问一个关于Linux中route命令的问题 我已在 Linux 终端中输入以下命令 gt route 并得到输出 Destination Gateway Genmask Flags Metric Ref Use Iface 192 16
  • 使用 Jasmine 监视 Backbone.js 路由调用

    在主干路由器上监视方法调用时遇到问题 以确保它在给定路由上调用正确的方法 测试摘录 describe Router gt beforeEach gt router new App Router Backbone history start
  • Rails 路由:嵌套、成员、集合、命名空间、范围和可定制

    我想更多地了解铁路路线 会员及收藏 Example resource route with options resources products do member do get short post toggle end collecti
  • 谷歌地图通过骨干javascript返回div标签但不显示

    我已经开始使用地理定位 我可以获得坐标等 我想在地图中显示它 但是当我将地图返回到 div 时 什么也没有显示 现在我查看了 div 地图正在返回 但只是不可见 这是有问题的 div 请注意 这似乎只是一个小地图的链接 a style di
  • ZF2 路由与 ZF1 相同

    如何使路由自动适用于 ZF1 结构中的所有内容 模块 控制器 操作 par1Name par1Val par2Name par2Val 我阅读了有关路由的信息 但在我看来 我必须手动添加所有操作 并且我发现可选参数存在问题 您可以至少在每个
  • 我应该在客户端和服务器上都使用 MVC 吗?

    我决定在我的网站上使用 MVC 模式 所以 现在我在我的网站上使用 Backbone js 框架 我网站上的所有操作都是ajaxy 所以server只从db获取数据 并将数据保存到db 我是否也需要在服务器端使用 MVC 这让一切都变得复杂
  • ZF2 路线参数带斜杠

    是否可以使用包含正斜杠的参数来组装路由 Config someroute gt array type gt Zend Mvc Router Http Segment options gt array route gt someroute p
  • 组织 jQuery/JavaScript 代码的最佳方式 (2013) [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 问题 这个答案之前已经回答过 但已经
  • 在 MVC 4 中使用路由更改 URL 参数

    我的几个 API 函数允许使用名为 attribute 和 attributeDelimiter 单数 的参数 这意味着预期的 URL 格式为 SomeController SomeAction aaa bbb attribute ccc
  • JS Sapper:将数据发布到服务器(正确的方法?)

    如何使用 Sapper JS lib 正确地将数据发布到服务器 说 我有一个页面 板编辑器 我可以在其中从用 SVG 编写的六边形网格中选择 取消选择图块 并在存储数组中添加 减去十六进制坐标 然后用户填写一个表单 其中包含板 名称 作者和

随机推荐

  • 具有默认值的 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
  • 骨干路由器:首先等待数据被获取

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