我想知道人们如何在Backbone中处理以下情况:通常当用户导航到应用程序的根目录时,会从后端加载某组数据,立即处理,然后显示在DOM中。< / p>
应用中有链接会将您导航到其不同的子部分。路由器捕获导航并用您导航到的任何页面替换当前页面,所有这些都基于已经获取的相同数据。
问题在于,用户可以将内部/辅助URL加入书签并导航到“冷”,就像数据有机会被提取一样,而无需通过根URL。是否存在处理这种情况的惯用/传统方式(在路由器中,我假设)?
在各种路由器路径处理函数中,一种方法是始终调用一个方法来检查是否有足够的数据来完成操作,如果没有,则获取它然后继续?
答案 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();
});