У кого-то был большой успех с RequireJS и Ember.js? Видя, как Эмбер любит привязывать свою структуру к глобальному объекту, я нахожу, что он может действительно прикладом головы с помощью Requirejs. Будет ли что-то вроде LAB.js работать лучше для Ember?
Ember.js и RequireJS
Ответ 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 в комплекте).
Ответ 2
Существует лучший способ включить файл руля, который может иметь несколько блоков шаблонов. Которые могут быть скомпилированы и доступны в одном из них.
например: У вас есть следующий файл шаблонов Handlebars:
../шаблоны/sample.handlebars
<div><!-- just a filler html tag. Wont show up in your page -->
<script type="text/x-handlebars" data-template-name="template1">
Some Html or Template Content ...
</script>
<script type="text/x-handlebars" data-template-name="template2">
Some Html or Template Content ...
</script>
<script type="text/x-handlebars" data-template-name="template3">
Some Html or Template Content ...
</script>
</div>
../просмотров/sampleView.js
define([
'jquery',
'lib/ember',
'plugins/text!../templates/sample.handlebars'],
function($, Em, myTemplateSource) {
// Bootstrap method accepts a context element under which all handlebars
// template blocks are defined. The filler <div> in this case.
// Compiles and assigns to the EM.TEMPLATES hash correctly.
Em.Handlebars.bootstrap($(myTemplateSource));
var myView = Em.View.create({
templateName: "template1";
});
return myView;
});
Ответ 3
Я только что загрузил github стартовый набор для EmberJS + RequireJS, вы можете проверить его https://github.com/fernandogmar/Emberjs-RequireJS
Любые хорошие предложения будут высоко оценены. Получайте удовольствие!
Ответ 4
Ember CLI поддерживает синтаксис модуля ES6, который преобразуется в AMD. Похоже, что сообщество выходит за Ember CLI как предпочтительный способ использования Ember.
Ответ 5
В Mimosa есть несколько хороших примеров проектов с использованием Ember и Require.js. Здесь один для оформления заказа: https://github.com/dbashford/mimosa-ember-emblem-templates. Инструкции по его запуску находятся в README.