2013-02-09 5 views
2

В то время как базовая модель имеет поддержку AMD для использования с RequireJS, это зависит от underscore mixin во внешнем файле под названием underscore.mixin.deepExtend.js, который не совместим с AMD.Как загрузить базовую модель с RequireJS?

Глядя на этот вопрос: How to mixin Underscore plugins in RequireJS?, кажется, что я могу вручную подмешать deepExtend в Underscore в шайбы установки в RequireJS инициализации.

... 
shim: { 
    ... 

    'deep-model': { 
     deps: 'underscore', 
     init: function() { 
      _.mixin(/* hash of deepExtend functions */); 
      return _; 
     } 
    } 
} 
... 

Однако, я застрял на том, что делать в этой точке, так как underscore.mixin.deepExtend не возвращает хэш функций, _.mixin() требует.

Есть ли способ загрузить базовую модель с RequireJS без изменения исходного кода?

+0

Я закончил с использованием [магистральным вложенным] (https://github.com/afeld/backbone-nested). Он имеет больше возможностей и легко поддаётся сглаживанию. 'requirejs.config ({ пути: { подчеркивание: 'Библиотека/подчеркивание', позвоночник: 'Библиотека/магистральная', 'магистральная-вложенными': 'Библиотека/магистральная-вложенная-v1.1.2.min', }, прокладка: { подчеркивание: { экспорта: '_' }, позвоночник: { DEPS: [ 'подчеркивание', 'JQuery'], экспорта: 'магистральные' }, «backbone- nested ': { deps: [' backbone '], export:' Backbone ' }, }, }); ' – unblevable

ответ

3

Это может быть не тот ответ, который вы ищете, но один из вариантов, который я лично посоветую, - это просто оставить Underscore (и любые миксы, а также, возможно, Backbone и jQuery) из Требований полностью. Основное преимущество этого подхода (за исключением того, что ваша проблема уходит как побочный эффект) заключается в том, что вы не запускаете каждый модуль, импортируя одну и ту же библиотеку (или библиотеки, если вы делаете то же самое с Backbone/jQuery).

Правда, это немного «загрязняет» глобальное пространство, но, на мой взгляд, имеющего _ (или $ или Backbone) переменной в глобальном пространстве имен ничего не повредит. Тем не менее, он решает вашу проблему, избегает необходимости в прокладке и экономит много импорта. И, конечно же, вы можете (и должны) по-прежнему использовать «Требовать» для своего собственного кода, так как сохранение ваших переменных от «загрязняющих» глобальных пространств имен избавит вас от будущих головных болей.

Просто мысль.

+2

Как вы уже догадались, это не было решением, которое я искал, так как я хочу получить все преимущества RequireJS, но это решение. Тем не менее, я сделал больше исследований альтернатив и обнаружил, что [Backbone-Nested] (https://github.com/afeld/backbone-nested) обеспечивает очень похожий и более эффективный набор функций IMO, чем набор Backbone-Deep-Model. Еще лучше, простая прокладка - это все, что требуется для загрузки этого плагина с помощью RequireJS. Благодарю. – unblevable

0

Вы можете Призонную шайбу позвоночника как зависимость:

shim: { 
    // this is an example, I don't know what are the actual dependencies are 
    'deep-model': ['backbone', 'underscore'] 
} 

и их, когда вы добавляете его в качестве зависимости будет работать на позвоночнике:

define(['backbone', 'deep-model'], function(Backbone) { 
    // backbone now has deepModel in it 
}); 
+0

Наверное, я не собирался прояснять ситуацию, но основная проблема связана с зависимостью глубокой модели от микса подчеркивания.Вашему решению успешно удается интегрировать глубокую модель в RequireJS, но затем глубокая модель жалуется на отсутствие _.deepExtend(), который определяет mixin. Я также не могу просто просто протащить deepExtend, потому что он должен запускаться и присоединяться к глобальному подчеркиванию для работы. Спасибо хоть. – unblevable

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