我正在通过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();
});
这是处理事件的代码。什么似乎是问题?感谢。
答案 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方法。