此刻我有点困惑。我的路由函数正在第一次加载时执行,这在我的情况下并不好,因为我使用这些函数渲染内容,并且在第一次加载时我得到了重复的内容...好吧,我可以添加控制变量防止在第一个init上渲染,但我想用纯粹的骨干做... 这是我的代码:
var Router = Backbone.Router.extend({
routes: {
"": "home",
"home": "home",
"about": "about",
},
home: function(){
getContent("home")
},
about: function(){
getContent("about")
},
initialize: function(){
Backbone.history = Backbone.history || new Backbone.History({silent:true});
root = "kitchenV3/"+lang;
var enablePushState = true;
var pushState = !! (enablePushState && window.history && window.history.pushState);
Backbone.history.start({
silent: true,
pushState: pushState,
root: root
});
}
});
另一方面,如果我删除,回家“和”关于“方法并以这种方式编写它们,它们不会在第一次加载时执行。但这两者之间的实际差异是什么?是否可以像第一个例子那样编写代码,但是为了防止在第一次加载时执行?
router.on('route:home', function(id) {
getContent("home")
});
感谢您的所有答案......
答案 0 :(得分:3)
来自Backbone's doc:
“如果服务器已经渲染了整个页面,并且您不希望在启动历史记录时触发初始路由,则传递silent:true。”
至于你的两个例子之间的区别:当你在第二种情况下启动Backbone的历史时,没有绑定任何路由,所以显然没有代码被执行。
修改强>
Successfully tested.
你会有警报。然后将Backbone.history.start()
替换为Backbone.history.start({silent: true})
,不会发生任何事情。
此外,深入研究Backbone.history #start:
if (!this.options.silent) return this.loadUrl();
所以...我不知道,但如果它不适合你,我猜我们需要更多的信息。
编辑2:
我在评论中改变了我告诉你的内容,this is the result。再一次,只需删除silent: true
即可看到差异。