РЕДАКТИРОВАТЬ (2012-01-30): я выдвинул более полный пример в репо на bitbucket.
Я успешно использовал RequireJS для загрузки Ember.js, а также аддон datetime ( github ). Пространство имен Ember само остается глобальным, но все данные моего приложения, включая мой экземпляр Ember.Application, хранятся в модулях через RequireJS. Я также загружаю шаблоны руля, используя текст! плагин.
У меня еще не было никаких проблем, но это не полное приложение, скорее подтверждение концепции. Вот как я заставил это работать. Я могу загрузить свое приложение напрямую с Safari без необходимости сервера. Вам все равно понадобится сервер для загрузки его с Chrome, который не позволяет JavaScript загружать файлы из файловой системы.
1) Поскольку Ember.js использует BPM / Spade, я не смог использовать клон репо. Вместо этого я оборачиваю скомпилированную версию в модуль:
Библиотека / ember.js
define(['jquery',
'plugins/order!lib/ember-0.9.3.js',
'plugins/order!lib/ember-datetime.js'],
function() {
return Ember;
});
Обратите внимание, что это само по себе не скрывает Ember от глобальной области видимости. Но я настраиваю все так, чтобы, если в будущем я смог это скрыть, все остальные модули, которые зависят от этого модуля, все равно работали как есть.
2) Модули могут относиться к Ember следующим образом:
приложение / core.js
define(['lib/ember'], function(Em) {
MyApp = Em.Application.create({
VERSION: "0.0.1"
});
return MyApp;
});
Здесь «Эм» можно было бы назвать как-нибудь еще; он не ссылается непосредственно на глобальную переменную, но происходит из модуля, определенного в lib / ember.js .
3) Чтобы попасть в Ember, руль должен быть зарегистрирован:
приложение / шаблоны / My-template.handlebars
MyApp v{{MyApp.VERSION}}.
приложение / просмотров / My-view.js
define(['lib/ember',
'plugins/text!app/templates/my-template.handlebars'],
function(Em, myTemplateSource) {
Em.TEMPLATES["my-template"] = Em.Handlebars.compile(myTemplateSource);
var myView = Em.View.create({
templateName: "my-template";
});
return myView;
});
4) Я использую require-jquery.js (jQuery и RequireJS связаны друг с другом).