2012-02-18 3 views
0

На данный момент я немного разочарован требованиями.Ошибка при загрузке модуля (AMD) с require.js

Я пытаюсь загрузить jquery и другие библиотеки в свой файл App.coffee. Проблема в том, что я не могу загружать зависимости модуля в моем определении. Некоторые входные аргументы (jq, jsn и т. Д.) Являются нулевыми или просто объектами HTMLDocument. Это зависит от перестановки плагинов, которые я пытаюсь выполнить: «order», «domReady» или none.

Мой каталог js lib выглядит как A). И мой файл App.coffee выглядит как B). Я попытался использовать «пути» в файле require.config и только ссылку на исходный файл (что вы видите ниже). Я знаю об интеграции requirejs-jquery. Но разве я не могу order my plugin loading?

Я получаю другой набор ошибок, если я попробую назвать «пути». Я вижу кого-то suggested jquery 1.7 (also here). Это работает? Сначала я хотел сделать шаг назад и убедиться, что у меня есть концепции правильно. i) require.config ii) определение модуля w/зависимости, iii) плагин заказа и т. д.

Если у меня есть эти понятия правильно, я думаю, что это проблема с версией jquery. Однако это не просто jquery, как зависимость. И невероятно сложно потерять время таким образом. Любая помощь приветствуется. Заранее спасибо.

)

 

    $ tree js/lib/ 
    js/lib/ 
    ├── backbone.js 
    ├── backbone_loader.js 
    ├── domReady.js 
    ├── jquery-1.6.3.js 
    ├── json2.js 
    ├── order.js 
    ├── pure.js 
    ├── require.js 
    └── underscore.js 

B)

 

    require.config({ 
     baseUrl: "/js", 
     paths: 
     order : '/js/lib/order' 
     jQuery : '/js/lib/jquery-1.6.3' 
     json2 : '/js/lib/json2' 
     Underscore : '/js/lib/underscore' 
     Backbone : '/js/lib/backbone_loader' 
     pure : '/js/lib/pure' 
    }) 


    define([ 'js/lib/order!js/lib/jquery-1.6.3', 
       'js/lib/order!js/lib/json2', 
       'js/lib/order!js/lib/underscore', 
       'js/lib/order!js/lib/backbone', 
       'js/lib/order!js/lib/pure', 
       'js/lib/order!js/bkeeping/models', ] 
     (jq, jsn, und, bbn, pur, models) -> 

     console.log('bkeeping LOADED') 

     # return an object with the models in it 
     models : models 
     jQuery : jq.noConflict() 
     json2 : jsn 
     Underscore : und.noConflict() 
     Backbone : bbn.noConflict() 
     pure : pure 
    ) 

ответ

0

Спасибо за руководство по этому вопросу.

Но я пошел на jquery-1.7, но мне все равно пришлось вытащить из глобального пространства, чтобы получить объект. Это относится и к моим другим библиотекам на данный момент, и к их зависимостям. То, что я закончил, - это вернуть объект с зависимостями в нем. Я получил загрузку библиотеки с помощью order plugin.

Контракт объектов зависимостей, передаваемых в вашу функцию обратного вызова (jq, pur, jsn и т. Д.), Просто не работает для этих библиотек. Он работает для моих определенных модулей (например: модели), но не для внешних библиотек. Я попробовал use plugin, но обнаружил, что он не работает для подчеркивания и магистрали, или я не настроил его правильно. Это мое работоспособное решение; хотя я должен сказать, что головные боли серьезно помутняют преимущества для require.js.

 

    define([ 'order!js/lib/jquery-1.7', 
       'order!js/lib/pure', 
       'order!js/lib/json2', 
       'order!js/lib/underscore', 
       'order!js/lib/backbone', 
       'order!bkeeping/models', ] 
     (jq, pur, jsn, und, bbn, models) -> 

     console.log('bkeeping LOADED') 

     # return an object with the dependencies in it 
     models : models 
     jQuery : jQuery.noConflict() 
     pure : pur      # pure and json2 objects are simply used in other libs. I don't need them directly 
     json2 : jsn 
     Underscore : _.noConflict() 
     Backbone : Backbone.noConflict() 
    ) 

+0

Проверьте, есть ли у меня ответ. Настройка, как там, использует плагин для решения вашей проблемы. Нет необходимости в заказе! – ggozad

+0

О да, я видел эти ссылки в вашем ответе. Но, возможно, я просто не настроил это правильно. Для requirejs я использую его только для своих внутренних модулей (см. Здесь) (http://stackoverflow.com/questions/9383652/howto-use-jquery-serialscroll-scrollto-not-working)). Я нахожу это слишком громоздким для внешних ресурсов. – Nutritioustim

0

Последние JQuery поддерживает AMD загрузчики и будет вести себя хорошо с require.js. Подчеркивание и Backbone нет, и вам нужно будет либо:

  1. используют модифицированную версию, например one от автора требуется.
  2. использовать плагин. Я нашел использование! плагин от here, чтобы соответствовать моим потребностям.