Backbonejs + Requestjs: Backbone es un problema nulo
-
27-10-2019 - |
Pregunta
En el enrutador.js. La columna vertebral de la consola Firebug es nula allí. ¿¿¿Por qué???
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;
});
enrutador.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
};
});
Solución
Backbone no admite la AMD y no se registra como módulo. Cuando se requiere, se registra normalmente como un objeto global de la columna vertebral, también, ya que 1.3 subrayado no es compatible con AMD y si requiere columna vertebral y subrayado en la columna vertebral y los espacios de nombres, sobrescribirán sus valores en estos módulos. undefined
causa de eso.
JQuery admite AMD pero también se registra como una instancia global. Básicamente significa que no necesita requerir jQuery, subrayado y columna vertebral varias veces; es suficiente si lo hace una vez en su script principal de requisitos.
Otros consejos
La alternativa es hackear la biblioteca Backbone.js.
Nota: Esto le permitirá hacer referencia a BackBone.js y una biblioteca subscore.js dentro de su requisito. JS Define, pero no evitará que se agregue al objeto global de nombres/ventana. Esto requiere un poco más de piratería.
Encontrar:
(function(){var l=this,y=
Reemplácelo con:
define('backbone',['underscore','jquery'],function(_,$){ var l = this; (function(){var y=
Agregue esto a la parte inferior de la página:
return l.Backbone; });
Luego haz lo mismo para subscore.js
Prefijo el comienzo con:
define('underscore',function(){
Agregue al final de la página:
return this._; });