我在使 Marionette 的路由器(确切地说是路由器的 Controller )工作时遇到困难。 这是我的代码:
App.RouterController = Marionette.Controller.extend({
render: function(){
alert(123);
}
});
//Router
App.Router = Backbone.Marionette.AppRouter.extend({
appRoutes: {
"*actions": "render"
},
controller: new App.RouterController,
initialize: function(){
var self = this;
Backbone.history = Backbone.history || new Backbone.History({});
var root = "/";
Backbone.history.start({
pushState: Modernizr.history,
root: root,
silent: !Modernizr.history
});
// handle history for old internet explorer + normal behaviour
if(!Modernizr.history) {
var rootLength = Backbone.history.options.root.length;
var fragment = window.location.pathname.substr(rootLength) || 'cs';
self.navigate(fragment, { trigger: true });
}
}
});
App.on('start', function(options) {
App.Main = new App.Main;
App.Router = new App.Router();
});
App.start();
我期望 App.RouterControler 的渲染方法将在所有路由上执行,但什么也没有发生,甚至控制台中没有显示错误...... 我做错了什么?
注意:路由器的初始化方法正在工作,如果我在其中输入警报或控制台日志,它将显示
最佳答案
AppRouter 应该被初始化。你可能没有这样做。以下是一个可以完成的示例
var firstProject= new Marionette.Application();
firstProject.addRegions({
main : 'main',
});
//my router
var MyRouter = Backbone.Marionette.AppRouter.extend({
/* standard routes can be mixed with appRoutes/Controllers above */
appRoutes : {
"first" : "firstMethodFromController",
"second" : "secondMethodFromController"
}
});
var MyController = Marionette.Controller.extend({
"secondMethodFromController": function() {
alert('Hi from inside the controller');
},
"firstMethodFromController": function() {
alert('Hi from inside the controller');
}
});
firstProject.addInitializer(function () {
// initialize routes with controller
new MyRouter({ controller: new MyController });
});
firstProject.on('initialize:after', function(){
if(Backbone.history){
Backbone.history.start();
}
});
关于javascript - 无法使 Marionette 路由器工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24780212/