2016-02-27 2 views
2

app.jsмарионеток AppRouter не работает с Browserify

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 
     }); 
    }); 
}); 

Я знаю, модуль марионеток устарел, поэтому не обращайте внимания, что, как я до сих пор тестирование Browserify.

Проблема в том, что маршрут "": "showSearchOption" не запускается.

Я высылаю в Marionette.AppRouter as Backbone.Router , и я не могу понять, как его решить?


Edit:
То, что я считаю, что экземпляр Backbone, что марионетка использует внутренне отличается от того, что я получаю, когда я require('backbone').
Любые предложения по этой проблеме?

+0

Вы уверены, что вызывается Backbone.history.start()? –

+0

Что вы подразумеваете под «модулем марионеток, устаревшим»? – Kevin

ответ

0

Вы правы: проблема в том, что Marionette требует своего собственного экземпляра Backbone.

Я ударил головой об этой проблеме некоторое время, прежде чем я ударил по одному решению. Я решил эту проблему, обновив до NPM v3, который имеет плоскую структуру зависимостей, а затем установил window.Backbone = require('backbone');.

Если вы не хотите этого делать, вы также можете использовать peerDependencies, о котором я много узнал о here. Обратите внимание, что я не проверял этот способ выполнения; Я счастлив использовать NPM v3.

Смежные вопросы