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

});

enter image description here

¿Fue útil?

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.

  1. Encontrar:

    (function(){var l=this,y=
    
  2. Reemplácelo con:

    define('backbone',['underscore','jquery'],function(_,$){
    var l = this;
    (function(){var y=
    
  3. Agregue esto a la parte inferior de la página:

    return l.Backbone;
    });
    

Luego haz lo mismo para subscore.js

  1. Prefijo el comienzo con:

    define('underscore',function(){
    
  2. Agregue al final de la página:

    return this._;
    });
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top