Marionette AppRouter,无法导航到正确的URL

时间:2014-02-20 08:27:09

标签: javascript backbone.js url-routing marionette

我正在通过David Sulc的书Backbone.Marionette.js的路由示例:温和的介绍

https://leanpub.com/marionette-gentle-introduction

ContactManager.navigate = function (route, options) {
    options || (options = {});
    Backbone.history.navigate(route, options);

};


ContactManager.getCurrentRoute = function () {
    return Backbone.history.fragment;
};


ContactManager.on("initialize:after", function () {

    if (Backbone.history) {
        Backbone.history.start();

        if (this.getCurrentRoute() === "") {
            ContactManager.trigger("contacts:list");

        }

    }

正如您可以看到历史片段是否为空,它将触发contacts:list事件,该事件将呈现联系人列表。但是,它根本没有重定向,我发现该片段以某种方式预设为“联系人”,因此该事件根本不会被触发。它也发生在我身上,最初这个片段是空的并且已经渲染了所有内容,并且url正确地更改了,但是在刷新片段时仍然是“联系人”并且再次没有呈现任何内容。

 ContactsApp.Router = Marionette.AppRouter.extend({
        AppRoutes: {
            "contacts": "listContacts"

        }
    });

ContactManager.on("contacts:list", function () {
        ContactManager.navigate("contacts");
        API.listContacts();

    });

这是处理事件的代码。什么似乎是问题?感谢。

1 个答案:

答案 0 :(得分:1)

我认为有些代码丢失了。我期望在路由器中找到类似的东西:

var myController = {
    listContacts: function () {
        ContactManager.trigger("contacts:list");
    }
};

ContactsApp.Router = Marionette.AppRouter.extend({
    controller: myController,
    appRoutes: {
        "contacts": "listContacts"
    }
});

请注意,appRoutes以小写字母a开头。

现在,路由contacts将调用控制器的listContacts方法并触发ContactManager.on("contacts:list"...回调,并运行相应的API方法。