Ответ 1
РЕДАКТИРОВАТЬ (2012-01-30): я сделал более полный пример в repo на битбакете.
Я успешно использовал RequireJS для загрузки Ember.js, а также аддона datetime (github). Пространство имен Ember остается глобальным, но все мои данные приложения, включая мой экземпляр Ember.Application, хранятся в модулях через RequireJS. Я также загружаю шаблоны ручек с помощью "text!" плагин.
У меня еще не было проблемы, но это не полное приложение, скорее доказательство концепции. Вот как я это сделал. Я могу загрузить приложение напрямую с помощью 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;
});
Здесь "Em" можно было назвать другим; он не ссылается непосредственно на глобальную переменную, а исходит из модуля, определенного в 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 в комплекте).