BackBonejs + Requisitijs: la spina dorsale è nulla di null
-
27-10-2019 - |
Domanda
Nel router.js. La console Firebug avviene la spina dorsale lì. Perché???
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
};
});
Soluzione
La spina dorsale non supporta l'AMD e non si registra come modulo. Quando richiesto Registri IT normalmente come un oggetto spina dorsale globale, anche poiché 1.3 sottoscritto non supporta nemmeno AMD e se richiederai la spina dorsale e il sottolinea undefined
causa di questo.
JQuery supporta AMD ma si registra anche come istanza globale. Fondamentalmente significa che non è necessario richiedere jQuery, sottolineatura e spina dorsale più volte - è sufficiente se lo fai una volta nella sceneggiatura principale di Requisitijs
Altri suggerimenti
L'alternativa è quella di hackerare la libreria BackBone.js.
Nota: ciò ti consentirà di fare riferimento alla backbone.js e alla libreria di undercore.js all'interno di Requisite.js, ma non impedirà loro di essere aggiunti allo spazio dei nomi/finestra globale. Ciò richiede un po 'più di hacking.
Trova:
(function(){var l=this,y=
Sostituirlo con:
define('backbone',['underscore','jquery'],function(_,$){ var l = this; (function(){var y=
Aggiungi questo in fondo alla pagina:
return l.Backbone; });
Quindi fai lo stesso per sottolineate.js
Prefissa l'inizio con:
define('underscore',function(){
Aggiungi alla parte inferiore della pagina:
return this._; });