javascript - 无法使 Marionette 路由器工作

标签 javascript backbone.js marionette backbone-routing

我在使 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/

相关文章:

javascript - 如何从 URL 获取 JSON 对象

javascript - 如何防止模式弹出asp.net

javascript - 何时使用 jQuery-ui 插件 vs Backbone View?

javascript - 如何在悬停时为链接的颜色设置动画

javascript - 在 JS 中给字典键加上引号

javascript - 无法在主干 View 中定义两个事件

javascript - Etch.js 与 Backbone.Marionette.js 集成

javascript - 无法将模型添加到指定索引处的主干集合

javascript - BackboneJS 添加和删除单击元素的类

Backbone.js 路由器在放置时触发,而不是在发布时触发