2012-04-12 5 views
12

Ich möchte Schnurrbart von requirejs laden und verwenden.Laden von Schnurrbart mit requirs

Vielleicht hat diese Frage bereits gestellt:
AMD Module Loading Error with Mustache using RequireJS

Wie auch immer ich versuche, herauszufinden, wie kann ich meinen Code zu beheben:


main.js

require.config({ 
    paths: { 
     jquery: 'libs/jquery/jquery', 
     underscore: 'libs/underscore/underscore-min', 
     backbone: 'libs/backbone/backbone-optamd3-min', 
     mustache: "libs/mustache/mustache" 
    } 
}); 

require([ 
    'views/app' 
    ], function(AppView){ 
     var app_view = new AppView; 
}); 

app.js

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    "mustache" 
    ], function($, _, Backbone, Mustache) { 
     console.log($, _, Backbone, Mustache); // <-- *** Mustache is null *** 
     // ...... 
     } 
); 

Wie Sie im Kommentar auf app.js Datei sehen können, Mustache is null ...
Sollte ich eine andere Bibliothek von Schnurrbart benutzen? Hier ist, was ich Mustache

Antwort

8

Sie verwende sollte eine neue Datei Schnurrbart-wrap.js in Ihrem Schnurrbart Verzeichnis nur erstellen, die wie folgt aussieht:

define(['libs/mustache/mustache'], function(Mustache){ 
    // Tell Require.js that this module returns a reference to Mustache 
    return Mustache; 
}); 

und Ihr dann Haupt sein:

mustache: "libs/mustache/mustache-wrap" 
+2

Dies sollte in der Dokumentation sein! – wprl

+1

@AntoJs Die erste Zeile sollte lesen; 'define (['libs/bustache/bustache'], Funktion (Moustache) {' – Matt

1

Sie könnten wahrscheinlich in-line auch tun in dem Codenamen definieren, Schnurrbart, oder irgendwo in „main.js“ (spart sich die Mühe der Erstellung * -wrap-Datei) 01

verbraucht
17

Sieht aus wie Schnurrbart supports AMD modules ab Juli '12. So sollte es jetzt mit einem Loader wie require.js aus der Box funktionieren.

7

Nicht sicher, ob RequireJS 2.1.0 war zum Zeitpunkt der Veröffentlichung dieser Frage (und die Antworten), aber die bevorzugte Art der Handhabung dieser jetzt ist shim config element (mehr Info on project's docs page).

Ihre main.js würde:

require.config({ 
    paths: { 
     jquery: 'libs/jquery/jquery', 
     underscore: 'libs/underscore/underscore-min', 
     backbone: 'libs/backbone/backbone-optamd3-min', 
     mustache: "libs/mustache/mustache" 
    }, 
    shim: { 
     'mustache': { 
      exports: 'Mustache' 
     } 
    } 
}); 
(...) 

ist Das effektiv die gleiche wie Wrapper @AntoJs vorgeschlagen, aber ohne den Standardcode.

... aber dann, da Moustache AMD unterstützt, gibt es keine Notwendigkeit, in erster Linie zu wrap/shim!