Marionettejs Routes

时间:2015-05-14 07:42:52

标签: javascript backbone.js marionette backbone-routing

我是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(Config for 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'
    }

});

2 个答案:

答案 0 :(得分:0)

您似乎错过了对路由器控制器的引用。

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

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

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

答案 1 :(得分:0)

似乎在初始化之后:在...之后:

App.on("initialize:after", function () {
    if (Backbone.history) {
        Backbone.history.start();
    }
});
最新版本的Marionette不支持

,我应该开始改为:

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

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

我应该首先做到这一点..