2012-07-13 18 views
5

Ich habe in den letzten Tagen mit Require.JS und SignalR gearbeitet und mir ist aufgefallen, dass die SignalR/Hubs manchmal geladen werden, wenn ich meine Site lade, obwohl meine require.js Konfiguration erscheint richtig liegen.Require.js + SignalR

Hier ist meine config:

require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette' 
    } 
}); 

require([ 
     'app', 
     'order!libs/jquery/jquery-min', 
     'order!libs/jQueryUI/jquery-ui-1.8.11.min', 
     'order!libs/jqGrid/grid.locale-en', 
     'order!libs/jqGrid/jquery.jqGrid.min', 
     'order!libs/underscore/underscore-min', 
     'order!libs/backbone/backbone-min', 
     'order!Marionette', 
     'order!libs/jquery.signalR-0.5.1', 
     'order!noext!signalr/hubs' 
    ], function (app) { 
     app.initialize();   
    }); 

Wenn diese ich auf Linie bekommen einen Fehler fehl 16 der Naben-Datei. Es sagt .

Auf V2 aktualisiert und meine Konfiguration geändert.

var fRequire = require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette', 
     sigr: 'libs/jquery.signalR-0.5.1' 
    }, 
    shims: {   
     "libs/jquery.signalR-0.5.1": { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/jquery.jqGrid.min": { 
      deps: ["jQuery"] 
     }, 
     "libs/jquery/jquery-ui-1.8.19.min": { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/grid.locale-en": { 
      deps: ["jQuery"] 
     }, 
     "noext!signalr/hubs": { 
      deps: ["sigr"] 
     } 
    } 
}); 

fRequire([ 
    'app' 
], function (app) { 
    app.initialize(); 
}); 

Jetzt benötigen wird an den falschen Stellen für jquery suchen, zu unterstreichen, etc ... trotz meiner es speziell wo sagen zu suchen. Vielleicht hat das etwas damit zu tun, dass ich einem alten Tutorial folge, als ich mit v1 konfiguriert habe.

http://backbonetutorials.com/organizing-backbone-using-modules/

FINAL UPDATE:

Hier ist meine Arbeits Konfig. Hoffentlich hilft es Neulingen wie mir, dieses Problem zu bestehen.

Es war obligatorisch, dass ich jquery in der Funktion laden (domready, app, $). Andernfalls kann der Signalgeber melden, dass er nicht gefunden werden kann.

Antwort

4

Wenn Sie requirjs 2.x verwenden, können Sie das Konfigurationsattribut "shims" verwenden. Dort können Sie die Abhängigkeiten zwischen Dateien angeben, die nicht den AMD, wie jQuery, jQueryUI, etc ..

Ihre Konfiguration als Beispiel verwenden:

require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette' 
    }, 
    // specify depedencies 
    shim: { 
     "libs/jquery.signalR-0.5.1" : { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/jquery.jqGrid.min" : { 
      deps: ["jQuery"] 
     } 
    } 
}); 

Konfigurieren Sie außerdem die Abhängigkeiten in „Shims“ eliminiert die Verwendung der "Bestellung!" Plugin.

Tipp: Verwenden Sie "Pfade", um einen freundlichen Namen für API, die Ihr System verwenden, zu setzen, wenn eine neue Version dieser API veröffentlicht wird, können Sie nur in "Pfade" ändern und fertig.

+0

Das sollte "Shim" anstelle von "Shims" sagen. – Sean

1

Nur um die Antwort weiter zu verfolgen und warum Sie noch jQuery vorinstallieren müssen ... Die Konfigurationseinstellung für require lautet "shim", nicht "shims". Require wird die angegebenen Abhängigkeiten nicht erkennen und laden, ohne die korrekte Schreibweise der Konfigurationseinstellung anzugeben. Ich habe vor kurzem gehämmert und darüber geschrieben: http://mikeycooper.blogspot.com/2013/01/requirejs-20-dependencies-seemingly.html

+0

Dies war eine wichtige Information. Ich wurde auch gebissen, indem ich "Shims" und nicht "Shim" benutzte. Danke, dass du darauf aufmerksam gemacht hast! –