2013-03-22 2 views
2

Я работаю над проектом Backbone и я загружаю jQuery, Underscore и Backbone с RequireJS.Всегда требуют определенных зависимостей в RequireJS

Я считаю себя печатая эту модель снова и снова во всех модулях:

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ... 

Есть ли способ или обходной путь, чтобы сделать эти 3 библиотеки доступны для всех модулей без явного требуя их, чтобы я мог сосредоточиться на требующих дополнительных вещей?

Я, хотя и загружаю этот стежок зависимостей в теги скриптов и использую RequireJS для своих модулей и дополнительных зависимостей, но я бы потерял функцию компиляции JamJS, связав себя, чтобы объединить jquery, underscore и позвоночник.

EDIT:

См Backbone Boilerplate: Они используют JamJS тоже, но они не требуют позвоночника, подчеркивание, JQuery на каждом файле. Каким-то образом он доступен всем.

Они требуют файл config.js в разметке с RequireJS. Это экспортирует файл require.config, а затем делегирует main.js. В основном, они имеют магический доступ к Магистраль!

Что произошло посередине?

+0

попробуйте сделать песочницу, а затем просто требуется песочница – imrane

+0

Что вы подразумеваете под песочницей? Можете ли вы дать больше информации? – jviotti

ответ

1

У меня есть песочница, как указано в комментариях. Вот пример в кофе-сценария:

define [ 
    "core" 
    "jquery" 
    "extensions/backbone" 
    "underscore" 
], (core, $, backbone, underscore) -> 

    util: 
    underscore: underscore 
    mvc: 
    Model: backbone.Model 
    Collection: backbone.Collection 
    View: backbone.View 
    Events: backbone.Events 
    Router: backbone.Router 

Это позволяет мне делать

define ["sandbox"], (sandbox) -> class View extends sandbox.mvc.View 

Это похоже на песочницу, используемой в AuraJS project и реализации facade pattern, который имеет преимущество, что. ..

Это позволяет вам раскрывать части библиотеки JavaScript, которые безопасны для использования , вместо того, чтобы подвергать весь API. Это особенно полезно при работе в командах.

Кроме того, в будущем, если я хочу расширить все виды из класса BaseView, а не напрямую из Backbone.View, мне просто нужно изменить ссылку в моей песочнице.

0

Привет вы можете сделать доступными по всему миру с помощью SHIM Config

пример, взятый оттуда:

shim: { 
    'backbone': { 
     //These script dependencies should be loaded before loading 
     //backbone.js 
     deps: ['underscore', 'jquery'], 
     //Once loaded, use the global 'Backbone' as the 
     //module value. 
     exports: 'Backbone' 
    }, 
+1

Это оставляет меня с помощью define ([basebone], function() {}). Shim не запускает автоматическую загрузку. Даже если мне требуется Backbone из моего корневого файла (а Backbone уже загружен), я должен явно требовать их во всех модулях – jviotti