Маршруты марионеток

Я новичок в Marionette, и я просто не могу заставить маршруты работать.

Я использую версию Marionette 2.4.1 и пытаюсь сделать это максимально простым способом, чтобы он просто работал.

Этот код работает для старой версии Marionette, v1.0.2, которая была включена в один из генераторов йоменов. Я знаю, что между этими двумя версиями существует огромный разрыв, но для каждого поста, блога, официальной документации и даже книг, написанных для этого фреймворка, код остается неизменным.

Ошибок в консоли нет, но 'домашний' метод просто не запускается.

Я что-то упустил здесь?


application.js (тело приложения):

define(['backbone', 'marionette'],

function (Backbone, Marionette) {
    'use strict';

    var App = new Marionette.Application();


    App.Router = Marionette.AppRouter.extend({
        appRoutes: {
            "home": "home"   
        }
    });

    var myController = {
        "home": function() {
            console.log("This thing just won't work.");
        }
    };


    /* Add initializers here */
    App.addInitializer(function () {
        console.log('App initialized');

        new App.Router({
            controller: myController   
        });
    });


    App.on("initialize:after", function () {
        if (Backbone.history) {
            Backbone.history.start();
        }
    });

    return App;
});

main.js (запускает наше приложение, определенное в application.js):

    require(['marionette', 'application'],

    function ( Marionette, App ) {
    'use strict';

    App.start();
    });

config.js (Конфиг для require.js)

require.config({

    baseUrl: "/scripts",

    /* starting point for application */
    deps: ['marionette', 'main'],


    shim: {
        backbone: {
            deps: [
                'underscore',
                'jquery'
            ],
            exports: 'Backbone'
        },
        marionette: {
            deps: ['backbone'],
            exports: 'Marionette'
        }
    },


    paths: {
        backbone: '../bower_components/backbone/backbone',
        jquery: '../bower_components/jquery/dist/jquery',
        underscore: '../bower_components/underscore/underscore',


        /* alias all marionette libs */
        'marionette': '../bower_components/marionette/lib/core/backbone.marionette',
        'backbone.wreqr': '../bower_components/backbone.wreqr/lib/backbone.wreqr',
        'backbone.babysitter': '../bower_components/backbone.babysitter/lib/backbone.babysitter'
    }

});

person Pietrzm    schedule 14.05.2015    source источник


Ответы (2)


Похоже, вам не хватает ссылки на контроллер маршрутизатора.

Попробуйте обновить маршрутизатор, чтобы включить ссылку на myController:

App.Router = Marionette.AppRouter.extend({
    controller: myController,
    appRoutes: {
        "home": "home"   
    }
});

Дополнительную информацию см. в документации AppRouter: http://marionettejs.com/docs/v2.4.1/marionette.approuter.html

person KarlPurk    schedule 14.05.2015

Кажется, что initialize:after in:

App.on("initialize:after", function () {
    if (Backbone.history) {
        Backbone.history.start();
    }
});

не поддерживается в новейших версиях Marionette, и вместо этого я должен был начать:

App.on("start", function () {
    if (Backbone.history) {
        Backbone.history.start();
    }
});

Большинство сообщений о марионетке кажутся довольно устаревшими. Они по-прежнему очень полезны, но обязательно проверьте их с помощью официальной документации фреймворка.

Я должен был сделать это в первую очередь..

person Pietrzm    schedule 09.06.2015