【问题标题】:Marionettejs RoutesMarionettejs 路线
【发布时间】:2015-07-25 18:03:09
【问题描述】:

我是 Marionette 的新手,只是找不到上班路线。

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

此代码适用于旧版本的 Marionette 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'
    }

});

【问题讨论】:

    标签: javascript backbone.js marionette backbone-routing


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      似乎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();
          }
      });
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多