【问题标题】:How to prevent backbone router to call event on page load如何防止骨干路由器在页面加载时调用事件
【发布时间】:2013-04-02 12:46:11
【问题描述】:

我现在有点困惑。我的路由函数在第一次加载时执行,这在我的情况下不好,因为我正在使用这些函数渲染内容,并且在第一次加载时我得到了重复的内容......好的,我可以添加控制变量防止在第一次初始化时渲染,但我想用纯主干来做...... 这是我的代码:

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
    });
    }

});

另一方面,如果我删除 ,,home" 和 ,,about" 方法并以这种方式编写它们,它们不会在第一次加载时执行。但这两者之间的实际区别是什么?是否可以像第一个示例那样编写代码,但要防止在第一次加载时执行?

router.on('route:home', function(id) {
      getContent("home")
});

感谢您的所有回答...

【问题讨论】:

  • Backbone.history = Backbone.history || new Backbone.History({silent:true}); 的意义何在? Backbone 为你做的,我不会搞砸的。
  • 另外,小错误,但"about": "about",:IE 不喜欢最后一个逗号。 (但也许它只是你代码的一部分)

标签: backbone.js backbone-routing


【解决方案1】:

来自Backbone's doc:
"如果服务器已经渲染了整个页面,并且你不希望在启动 History 时触发初始路由,则传递 silent: true。"

至于你的2个例子的区别:当你在第二种情况下启动Backbone的历史时,没有绑定任何路由,所以显然没有执行任何代码。

编辑:
Successfully tested.
你会有一个警报。然后将Backbone.history.start() 替换为Backbone.history.start({silent: true}),什么都不会发生。

此外,深入研究 Backbone.history#start:

if (!this.options.silent) return this.loadUrl();

所以...我不知道,但如果它不适合你,我猜我们需要更多信息。

编辑 2:
我已经改变了我在 cmets 中告诉你的内容,以及 this is the result。再次,只需删除 silent: true 即可查看差异。

【讨论】:

  • 这就是你的提议,对吧?但是我的效果还是一样... Backbone.history.start({ pushState: pushState, root: root, silent: true });
  • 我不知道 pushState 和 root 标志,因为它没有链接,但是是的,通过 {silent: true}
  • 在处理 hashbang 时效果很好,但在使用 pushstate 时效果不佳...查看我的编辑...顺便说一句,tnx 帮助我!
  • Grmblbl pushState...该死的>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多