0

我想知道人们如何在 Backbone 中处理以下情况:通常当用户导航到应用程序的根目录时,会从后端加载一组数据,立即处理然后显示在 DOM 中。

应用程序中有一些链接可以将您导航到它的不同子部分。路由器捕获导航并将当前页面替换为您导航到的任何页面,所有这些都基于已经获取的相同数据。

问题是用户可以为该内部/辅助 URL 添加书签并“冷”导航到它,就像在有机会获取数据之前一样,无需通过根 URL。是否有处理这种情况的惯用/传统方式(我假设在路由器中)?

一种方法是,在各种路由器路径处理函数中,总是调用一个方法来检查是否有足够的数据来完成操作,如果没有,获取它然后继续?

4

1 回答 1

1

在您调用之前,Backbone 不会在您的路由器中访问初始路由Backbone.history.start,因此您可以延迟它,直到您完成必要的设置。我通常 start在我的应用程序的主路由器上定义一个方法。看起来像:

var AppRouter = Backbone.Router.extend({
  start: function() {
    //init code here
    something.fetch({success: function() {
      //only call history start after the necessary initial setup is done
      Backbone.history.start();
    }});
  }
});

然后使用该方法启动应用程序:

window.app = new AppRouter();
window.app.start();

请记住,没有什么限制您仅使用Backbone. 如果你的启动代码很重,它可能不属于路由器。在这种情况下,您应该定义一个辅助函数来封装启动逻辑,并将路由器完全排除在外:

//startup.js
function startup(onComplete) {
  //do initialization stuff...
  onComplete();
});

//main.js
startup(function() {
  Backbone.history.start();
});
于 2013-02-20T00:03:24.320 回答