Не могу заставить роутер-марионетку работать

У меня возникли трудности с запуском маршрутизатора марионетки, а именно контроллера маршрутизатора. Вот мой код:

 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 будет выполняться на всех маршрутах, но ничего не происходит, даже в консоли не отображаются ошибки... Что я делаю неправильно?

Примечание. Метод инициализации маршрутизатора работает, если я добавлю в него оповещение или консольный журнал, он появится


person hjuster    schedule 16.07.2014    source источник
comment
Какую версию Marionette вы используете?   -  person Vahan Vardanyan    schedule 16.07.2014
comment
v2.0.2, я думаю, это последняя...   -  person hjuster    schedule 16.07.2014
comment
Код, размещенный здесь, правильный. Я не вижу никаких проблем. Вы пытались объявить собственный маршрут и действие и перейти туда?   -  person Vahan Vardanyan    schedule 16.07.2014
comment
Да, я сделал, но не повезло...   -  person hjuster    schedule 16.07.2014
comment
Возможно, у вас возникли проблемы при инициализации Marionette.Application или в других местах?   -  person Vahan Vardanyan    schedule 18.07.2014
comment
Итак, вы хотите выполнить render() контроллера для каждого совпадения маршрута Marionette, верно?   -  person P. R. Ribeiro    schedule 23.07.2014


Ответы (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();
    } 
});
person P. R. Ribeiro    schedule 20.07.2014