【问题标题】:Can't make marionette router to work无法使木偶路由器工作
【发布时间】:2014-07-16 11:57:10
【问题描述】:

我在让木偶的路由器工作时遇到困难,确切地说是路由器的控制器。 这是我的代码:

 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 的渲染方法将在所有路由上执行,但什么都没有发生,即使控制台中没有显示错误... 我做错了什么?

注意:路由器的初始化方法是有效的,如果我把警报或控制台登录进去,它就会显示出来

【问题讨论】:

  • 你用的是哪个版本的木偶?
  • v2.0.2,我猜这是最新的...
  • 此处发布的代码是正确的。我看不出任何问题。您是否尝试过声明自定义路线和操作并在那里导航?
  • 是的,我做到了,但没有运气......
  • 也许您在初始化 Marionette.Application 或其他地方有问题?

标签: javascript backbone.js marionette backbone-routing


【解决方案1】:

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();
    } 
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2018-09-07
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多