Backbonejs + requirejs: Backbone - это NULL.
-
27-10-2019 - |
Вопрос
В маршрутизаторе. Сэверная цепочка консоли Firebug Null. Почему???
app.js
define([
'order!jQuery',
'order!Underscore',
'order!Backbone',
'order!router' // Request router.js
],
function($, _, Backbone, Router){
App = {
initialize: function() {
console.log("app.js initalize");
Router.initialize();
}
};
return App;
});
router.js
define([
'order!Underscore',
'order!Backbone'
],
function(_, Backbone){
var AppRouter = Backbone.Router.extend({
// Console shows Backbone is null here, why?
// I'm sure the config is correct.
routes: {
'*actions': "defaultAction"
},
defaultAction: function(actions){
// We have no matching route, lets just log what the URL was
console.log('No route:', actions);
}
});
var initialize = function(){
console.log("Router initialize");
var app_router = new AppRouter;
Backbone.history.start();
};
return {
initialize: initialize
};
});
Решение
Backbone не поддерживает AMD и не регистрируется как модуль. Когда требуется, он обычно регистрируется как глобальный объект из -за магистратуры, а также, поскольку 1.3 подчеркивается не поддерживает AMD, и если вам потребуется магистральная и подчеркивая undefined
причина этого.
JQuery поддерживает AMD, но также регистрируется как глобальный экземпляр. По сути, это означает, что вам не нужно требуется jQuery, подчеркивание и засеяние несколько раз - этого достаточно, если вы сделаете это один раз в своем главном сценарии expertivejs
Другие советы
Альтернатива - взломать библиотеку Backbone.js.
Примечание. Это позволит вам ссылаться на Backbone.js и Underscore.js Library в вашем определении require.js, но это не остановит их от добавления в глобальное пространство имен/окно. Это требует немного больше взлома.
Находить:
(function(){var l=this,y=
Замените его:
define('backbone',['underscore','jquery'],function(_,$){ var l = this; (function(){var y=
Добавьте это в нижнюю часть страницы:
return l.Backbone; });
Тогда сделайте то же самое для underscore.js
Префикс начало с:
define('underscore',function(){
Добавьте в нижнюю часть страницы:
return this._; });