【问题标题】:Backbone router not dispatched?骨干路由器没有派出?
【发布时间】:2012-03-09 00:37:41
【问题描述】:

我是主干 0.9.1 的新手。 我发现当我更改哈希时,我无法在我的演示中触发哈希更改。 我的网址是 http://[...]/backbone/#help。我想我应该收到“帮助”的警报消息,但我没有。

$(function() {
    var App = {
        Controllers:{},
        initialize: function(){
            new App.Controllers.Routes();
            var h = new Backbone.History();
            h.start({root: '/backbone/'});
        }
    };

    App.Controllers.Routes = Backbone.Router.extend({
        routes: {
            "help":                 "help",
            "search/:query":        "search",
        },

        help: function() {
            alert("help");
        },

        search: function(query) {
            alert("search");
        }
    });

    App.initialize();
});

是不是有什么误解或误用?

【问题讨论】:

    标签: backbone.js router


    【解决方案1】:

    您不需要自己实例化 History 对象。此外,如果您不使用 pushstate,则无需在启动选项中指定 root

    所以,你的初始化方法应该是这样的:

    
            initialize: function(){
                new App.Controllers.Routes();
                Backbone.history.start();
            }
    

    【讨论】:

    • 感谢您的帮助〜但似乎在 Backbone 0.9.1 中,当我调用 Backbone.history.start(); 时,Backbone 的原型中没有历史记录;收到错误消息:Uncaught TypeError: Cannot call method 'start' of undefined。看起来路由器在 0.9.1 中有一些变化?
    • 这不是 0.9.x 中的更改,并且 .history 属性从未成为 Backbone 对象原型的一部分。 Backbone.history 属性会在您实例化一个定义了路由的路由器后自动添加。如果您收到此错误,则表示您的路由器未实例化或配置不正确。
    • 将初始化函数更改为新的 App.Controllers.Routes(); Backbone.history.start();问题已解决。
    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多