Подтвердить что ты не робот

Загрузка усов с использованием requirejs

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

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

4b9b3361

Ответ 1

Вам нужно просто создать в вашем файле усов новый файл mustache-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

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

Ответ 3

Не уверен, что при отправке этого вопроса (и ответов) отсутствовал 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'
        }
    }
});
(...)

То же самое, что и обертка, предлагаемая @AntoJs, но без кода шаблона.

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

Ответ 4

Возможно, вы также можете сделать in-line named define в коде, который потребляет усы, или где-то в "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
    }
)