我正在尝试从Marionette appRouter触发Marionette控制器方法,但是在应有的情况下不会触发这些方法。
您可以在http://jsfiddle.net/gabceb/bW69k/上查看我的代码
总之,代码初始化了一个控制器,一个appRouter和一个Marionette应用程序。我希望代码在调用适当的路由时触发控制器上的初始化(它确实如此)和index方法。该代码已从真正的应用程序移植并简化为Fiddler,因此这不是Fiddler的错。
我还通过将appRouter的方法更改为index1并让appRouter抱怨该方法不存在,来验证appRouter是否使用了正确的控制器(请注意,这只是我所做的测试,实际上并未在发布的代码中实现在提琴手上)
# app.coffee.js
class PagesController extends Marionette.Controller
initialize: (options) =>
alert "Controller initialized"
return
index: () =>
alert "Index method called"
return
class AppRouter extends Marionette.AppRouter
appRoutes: {
"" : "index"
}
window.app = new Backbone.Marionette.Application()
window.app.addInitializer( (options) =>
Backbone.history.start(pushState: true)
)
window.app.addInitializer( (options) =>
window.app.appRouter = new AppRouter(controller : new PagesController())
)
window.app.start()
我已经对此进行了一些调试,每当加载页面时,Backbone.History handlers数组都为空。这就是该代码在Backbone代码上的样子。
// Attempt to load the current URL fragment. If a route succeeds with a
// match, returns `true`. If no defined routes matches the fragment,
// returns `false`.
loadUrl: function(fragment) {
fragment = this.fragment = this.getFragment(fragment);
return _.any(this.handlers, function(handler) {
if (handler.route.test(fragment)) {
handler.callback(fragment);
return true;
}
});
},
最佳答案
启动AppRouter
后创建Backbone.history
的问题。
您可以在这里更多地了解它:Right place to start Backbone.history?
关于javascript - 未从appRouter调用主干 Marionette Controller 方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22416246/