将冷导航传递到Backbone中的内部URL?

时间:2013-02-19 23:49:42

标签: backbone.js backbone-routing

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

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

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

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

1 个答案:

答案 0 :(得分:1)

在拨打Backbone.history.start之前,Backbone不会在您的路由器中点击初始路由,因此您可以延迟它直到您完成必要的设置。我通常在应用程序的主路由器上定义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();
});