2012-04-12 2 views
12

Я бы хотел загрузить и использовать усы с помощью requirejs.Загрузка усов с использованием requirejs

Может быть, этот вопрос уже спросил:
AMD Module Loading Error with Mustache using RequireJS

Во всяком случае я пытаюсь выяснить, как я могу исправить мой код:


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

Как вы можете видеть в комментарии на app.js файл, Mustache is null ...
Должен ли я использовать другую библиотеку усов? Вот что я использую Mustache

ответ

8

Вы должны просто создать в директории усов новый файл усов-wrap.js, который выглядит следующим образом:

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

и тогда ваш главный будет:

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

Это должно быть в документах! – wprl

+1

@AntoJs Первая строка должна быть прочитана; 'define (['libs/mustache/mustache'], function (Mustache) {' – Matt

1

Возможно, вы также можете указать имя в имени в коде, который потребляет усы или где-то в «main.js» (сохраняет проблему при создании файла * -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

Похож на усы supports AMD modules с 12 июля. Поэтому теперь он должен работать из коробки с загрузчиком, таким как require.js.

7

Не уверен, что если RequireJS 2.1.0 был на момент публикации этого вопроса (и ответы), но предпочтительный способ обработки этого сейчас использует shim конфигурационный элемент (подробнее on project's docs page).

Ваш main.js станет:

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

Это эффективно такой же, как обертка предложил @AntoJs, но без шаблонного кода.

... но тогда, поскольку Mustache поддерживает AMD, нет необходимости обертывать/подгонять в первую очередь!

Смежные вопросы