Frage

Im Router.js. Das Firebug -Konsolenalarm -Rückgrat ist dort null. Warum???

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

});

enter image description here

War es hilfreich?

Lösung

Backbone unterstützt das AMD nicht und registriert sich nicht als Modul. Wenn dies erforderlich ist, registriert es normalerweise als globales Backbone -Objekt, da 1.3 Unterstrich AMD auch nicht unterstützt und wenn Sie Backbone und Unterstrich unter Backbone und _ Namespaces benötigen, überschreiben sie seine Werte in diesem Modulsbereich überschreiben. undefined Ursache dafür.

JQuery unterstützt AMD, registriert sich aber auch als globale Instanz. Grundsätzlich bedeutet dies, dass Sie nicht mehrmals JQuery, Unterstrich und Rückgrat benötigen - es reicht aus, wenn Sie es einmal in Ihrem erforderlichen Hauptskript tun

Andere Tipps

Die Alternative besteht darin, die Backbone.js -Bibliothek zu hacken.

Hinweis: Auf diese Weise können Sie Backbone.js und Undercore.js -Bibliothek innerhalb Ihres Anforderungens verweisen. Dies erfordert ein bisschen mehr Hacking.

  1. Finden:

    (function(){var l=this,y=
    
  2. Ersetzen Sie es durch:

    define('backbone',['underscore','jquery'],function(_,$){
    var l = this;
    (function(){var y=
    
  3. Fügen Sie dies am Ende der Seite hinzu:

    return l.Backbone;
    });
    

Dann machen Sie dasselbe für unterstrich.js

  1. Präfix den Anfang mit:

    define('underscore',function(){
    
  2. Zum Ende der Seite hinzufügen:

    return this._;
    });
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top