【问题标题】:Marionette AppRouter not working with BrowserifyMarionette AppRouter 无法与 Browserify 一起使用
【发布时间】:2016-06-10 16:08:30
【问题描述】:

app.js

module.exports = function () {
if (!window.__medicineManager) {
    var Backbone =  require('backbone'); 
    var Marionette = require('backbone.marionette');

    var MedicineManager = new Marionette.Application();

    MedicineManager.addRegions({
        mainRegion: "#main-region"
    });

    MedicineManager.navigate = function (route, options) {
        options || (options = {});
        Backbone.history.navigate(route, options);
    };

    MedicineManager.getCurrentRoute = function () {
        return Backbone.history.fragment;
    };

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

    MedicineManager.start();
    window.__medicineManager = MedicineManager;
}
return window.__medicineManager;
}();

medicine_app.js

var MedicineManager = require('app');
var Backbone = require('backbone');
var Marionette = require('backbone.marionette');
MedicineManager.module("MedicineApp", function (MedicineApp) {
    MedicineApp.Router = Marionette.AppRouter.extend({
        appRoutes: {
            "": "showSearchOption",
            "show/*id": "showMedicine"
        }
    });

    var API = {
        showSearchOption: function () {
            console.log('show search option');
        },
        showMedicine: function (id) {
            console.log('show ' + id);
        }
    };

    MedicineManager.addInitializer(function () {
        console.log('MedicineApp.Router initialised');
        new MedicineApp.Router({
            controller: API
        });
    });
});

我知道 Marionette 模块已被弃用,所以请忽略它,因为我仍在测试 Browserify。

问题是"": "showSearchOption" 路由没有被触发。

我的问题被提到Marionette.AppRouter as Backbone.Router 我不明白如何解决它?


编辑:
我认为 Marionette 在内部使用的 Backbone 实例与我在 require('backbone') 时得到的不同。
对这个问题有什么建议吗?

【问题讨论】:

  • 你确定 Backbone.history.start() 被调用了吗?
  • Marionette module is deprecated 是什么意思?

标签: javascript backbone.js npm marionette browserify


【解决方案1】:

你是对的:问题在于 Marionette 需要自己的 Backbone 实例。

在找到一个解决方案之前,我对这个问题进行了一段时间的思考。我通过升级到具有扁平依赖结构的 NPM v3 解决了这个问题,然后设置了window.Backbone = require( 'backbone' );

如果您不想这样做,我认为您也可以使用peerDependencies,我从here 中学到了很多东西。请注意,我还没有测试过这种方法;我很高兴使用 NPM v3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2014-04-20
    • 2016-04-02
    • 1970-01-01
    • 2016-05-08
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多