Marionettejs 路线

Marionettejs Routes

我是 Marionette 的新手,我就是找不到工作路线。

我正在使用 Marionette 的 2.4.1 版本,并尝试以最简单的方式进行操作,这样它就可以正常工作。

此代码适用于旧版本 Marionette,v1.0.2,它包含在 yeoman 的生成器之一中。我知道这两个版本之间存在巨大差距,但每个 post、博客、官方文档甚至为该框架编写的书籍代码都保持不变。

控制台没有错误,但是 'home' 方法无法启动。

我是不是漏掉了什么?


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'
    }

});

您似乎缺少对路由器控制器的引用。

尝试更新路由器以包含对 myController 的引用:

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

有关更多信息,请参阅 AppRouter 文档: http://marionettejs.com/docs/v2.4.1/marionette.approuter.html

似乎 initialize:after 在:

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

在最新版本的 Marionette 中不受支持,我应该开始:

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

大多数关于 Marionette 的帖子似乎都已经过时了。这些仍然非常有用,但请务必使用官方框架的文档进行验证。

我一开始就应该这样做..