Загрузка адаптеров Ractive.js в AMD с помощью Require.js


person Luis    schedule 09.10.2013    source источник


Ответы (2)


Не существует Единого Верного Пути, потому что каждый проект AMD отличается (некоторые люди оборачивают Backbone в функцию define, некоторые используют конфигурацию shim, все упорядочивают вещи в разные структуры папок...). Однако в основном адаптер должен работать в лексической области, в которой есть как Ractive, так и Backbone.

Таким образом, один из способов приблизиться к этому — создать простой модуль-оболочку, например:

define(["ractive","backbone"], function (Ractive, Backbone) {
  // adaptor code goes here. No need to include the outer IIFE
  // (https://github.com/Rich-Harris/Ractive/blob/master/plugins/adaptors/Backbone.js)
});

Затем вы можете либо продолжить выполнение

define(["ractive","ractive.backbone"], function(Ractive) {....});

для каждого модуля, который использует как Ractive, так и адаптер Backbone, или вы можете запросить адаптер Backbone один раз в начале вашего приложения — если он требуется до того, как Ractive что-либо отобразит, он будет работать:

// in main.js, or equivalent
require(["app","ractive.backbone"], function (app) {
  app.init(); // or whatever
});

Я открыт для предложений о том, как сделать все это немного более понятным!

person Rich Harris    schedule 10.10.2013

В нашем проекте мы используем установку, очень похожую на описанную здесь Ричардом Харрисом. т.е. у нас есть модуль-оболочка (ractive.wrap.js), который содержит адаптер, а затем мы используем параметр карты в файле require.config для доставки оболочки вместо самого Ractive. Выглядит так:

require.config(
{
    "map":
    {
        "*": {"ractive": "ractive.wrap"},
        "ractive.wrap": {"ractive": "ractive"}
    }
}

Таким образом, всякий раз, когда вы используете

define (['ractive'], function(Ractive)
{
    // some cool function using ractive
});

на самом деле вы получаете Ractive с адаптером Backbone на борту.

person skeptic35    schedule 08.11.2013
comment
Отличный ответ - у меня была проблема с тем, чтобы Ractive, RequireJS, Backbone и RV хорошо работали вместе, и этот подход - очень умный способ сделать это. - person Maloric; 15.03.2015
comment
Также стоит отметить, что ваш модуль ractive.wrap должен возвращать Ractive, чтобы это работало. В противном случае вы, вероятно, столкнетесь с ошибкой Ractive.parse не является функцией. - person Maloric; 15.03.2015