Marionettejs Routes

Marionettejs Routes

本文关键字:Routes Marionettejs      更新时间:2023-09-26

我是新来的木偶,我就是找不到上班的路线。

我使用的是木偶2.4.1版本,并试图用最简单的方式来做,这样它就可以工作了。

此代码适用于旧版本的木偶v1.0.2,该版本包含在一个yeoman的生成器中。我知道这两个版本之间有很大的差距,但是对于每个帖子,博客,官方文档甚至为这个框架编写的书籍来说,代码都是一样的。

控制台没有错误,但是'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();
    }
});

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

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

大多数关于木偶的帖子似乎相当过时。这些仍然很有帮助,但一定要与官方框架的文档进行验证。

我一开始就应该这么做的