2012-04-12 2 views
12

Me gustaría cargar y usar bigote por requirejs.Cargando bigote usando requirejs

Tal vez esta pregunta ya ha pedido:
AMD Module Loading Error with Mustache using RequireJS

De todos modos estoy tratando de averiguar cómo puedo arreglar mi código:


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 *** 
     // ...... 
     } 
); 

Como se puede ver en el comentario sobre app.js archivo, Mustache is null ...
¿Debo utilizar otra biblioteca del bigote? Aquí lo que estoy utilizando Mustache

Respuesta

8

eso deberá crear en el directorio de bigote de un nuevo archivo bigote wrap.js que tiene este aspecto:

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

y entonces su principal será:

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

¡Esto debería estar en los documentos! – wprl

+1

@AntoJs La primera línea debe leer; 'define (['libs/bigote/bigote'], función (bigote) {' – Matt

1

Probablemente también podría hacer una definición llamada en línea en el código que consume bigote, o en algún lugar de "main.js" (guarda el problema de crear * -wrap)

define('mustache', ['libs/mustache/mustache'], function(){ 
    // Tell Require.js that this module returns a reference to Mustache 
    return Mustache; // from global 
}); 
require(
    ['jquery','underscore','backbone','mustache'] 
    , function($, _, BB, Mustache){ 
     // use them 
    } 
) 
17

Parece que Moustache supports AMD modules a partir de julio de '12. Por lo tanto, ahora debería funcionar de la caja con un cargador como require.js.

7

No estoy seguro de si RequireJS 2.1.0 estaba en el momento de publicar esta pregunta (y las respuestas), pero la forma preferida de manejar esto ahora es usando el elemento de configuración shim (más información on project's docs page).

Sus main.js se convertirían en:

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' 
     } 
    } 
}); 
(...) 

Eso es efectivamente el mismo que sugirió envoltorio @AntoJs, pero sin el código repetitivo.

... pero, dado que Moustache admite AMD, ¡no hay necesidad de ajustar/calzar en primer lugar!

Cuestiones relacionadas