2013-10-09 6 views
1

Я тестировал новый адаптер Backbone для Ractive.js и он работает как шарм загружая его как example ...Loading Ractive.js адаптеры AMD с использованием Require.js

<script src='lib/Ractive.js'></script> 
<!-- the adaptor --> 
<script src='lib/adaptors/Backbone.js'></script> 

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

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

От ractive.backbone.js (Uncaught ReferenceError: теля Тяговый не определен)

Как будет лучше всего загружать активные адаптеры с AMD?

ответ

3

Существует не один True Way, потому что каждый проект 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) {....}); 

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

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

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

1

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

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

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

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

вы фактически получаете теля Тяговая с адаптером Backbone на борту.

+0

Отличный ответ - у меня возникла проблема с Ractive, RequireJS, Backbone и RV, чтобы играть красиво вместе, и этот подход - очень умный способ сделать это. – Maloric

+0

Также стоит отметить, что ваш модуль «ractive.wrap» должен возвращать Ractive, чтобы это работало. В противном случае вы, скорее всего, столкнетесь с ошибкой «Ractive.parse is not a function». – Maloric

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