Вопрос по javascript – Загрузка усов с помощью requirejs

12

Я хотел бы загрузить и использовать усы по requirejs.

Может быть, этот вопрос уже задавали:
Ошибка загрузки модуля AMD с усами при использовании 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...
Должен ли я использовать другую библиотеку усов? Вот что я используюУсы

Ваш Ответ

4   ответа
17

поддерживает модули AMD по состоянию на июль 12. Так что теперь он должен работать из коробки с загрузчиком, таким как require.js.

9

p.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"
@AntoJs Первая строка должна читаться;define(['libs/mustache/mustache'], function(Mustache){
Это должно быть в документах!
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
    }
)
7

RequireJS 2.1.0 отсутствовал на момент публикации этого вопроса (и ответов), но предпочтительным способом решения этого вопроса является использованиеshim элемент конфигурации (подробнеена странице документации проекта).

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

Это & APOS; seffectively то же самое, что предложил обертка @AntoJs, но без шаблонного кода.

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

Похожие вопросы