Jon*_*esy 34 javascript requirejs ember.js
有没有人在RequireJS和Ember.js上取得多大成功?看到Ember喜欢将其结构分配给一个全局对象,我发现它可以与Requirejs真正对接.像LAB.js这样的东西会更适合Ember吗?
Cla*_*urt 31
编辑(2012-01-30):我在bitbucket 的回购中推出了一个更完整的例子.
我已成功使用RequireJS加载Ember.js以及datetime插件(github).Ember命名空间本身保持全局,但我的所有应用程序数据(包括我的Ember.Application实例)都通过RequireJS保存在模块中.我也在使用'text!'加载把手模板 插入.
我还没有任何问题,但这不是一个完整的应用程序,更多的是概念证明.这就是我如何使它发挥作用.我可以直接使用Safari加载我的应用程序而无需服务器.您仍然需要一台服务器来加载Chrome,这不允许JavaScript从文件系统加载文件.
1)因为Ember.js使用BPM/Spade,所以我无法使用repo的克隆.相反,我将编译后的版本包装在一个模块中:
lib/ember.js:
define(['jquery',
'plugins/order!lib/ember-0.9.3.js',
'plugins/order!lib/ember-datetime.js'],
function() {
return Ember;
});
Run Code Online (Sandbox Code Playgroud)
请注意,这本身并不会将Ember隐藏在全局范围之外.但是我正在设置,以便在将来我能够隐藏它时,依赖于该模块的每个其他模块仍将按原样运行.
2)模块可以像这样引用Ember:
app/core.js:
define(['lib/ember'], function(Em) {
MyApp = Em.Application.create({
VERSION: "0.0.1"
});
return MyApp;
});
Run Code Online (Sandbox Code Playgroud)
在这里,"Em"可能被命名为别的东西; 它不直接引用全局变量,而是来自lib/ember.js中定义的模块.
3)要由Ember进入,车把必须注册:
app/templates/my-template.handlebars:
MyApp v{{MyApp.VERSION}}.
Run Code Online (Sandbox Code Playgroud)
app/views/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;
});
Run Code Online (Sandbox Code Playgroud)
4)我正在使用require-jquery.js(jQuery和RequireJS捆绑在一起).
小智 8
有一种更好的方法来包含一个可以有多个模板块的车把文件.哪个可以编译并在一个包含中可用.
例如:您有以下Handlebars模板文件:
../templates/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>
Run Code Online (Sandbox Code Playgroud)
../views/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;
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21821 次 |
最近记录: |