我很喜欢emberjs,并希望在我的几个小型移动应用程序中采取下一步,并预编译我的Ember/Handlebars模板,作为构建过程的一部分.
我宁愿远离搞乱Ruby,也不想使用node.js,因为我更习惯使用它.
我相信我想要使用的是Ember.Handlebars.precompile,但遗憾的是我无法在节点环境中加载规范的ember.js文件.来自节点repl的天真尝试示例:
> var e = require('./ember');
ReferenceError: window is not defined
at /Users/jeremyosborne/git/projects/ldls/client/lib/emberjs/src/ember.js:5:1
at Object.<anonymous> (/Users/jeremyosborne/git/projects/ldls/client/lib/emberjs/src/ember.js:1596:2)
--- stack trace, you get the idea ---
Run Code Online (Sandbox Code Playgroud)
我想我已经找到了如何在我的代码中设置它们以便它们能够正确处理我的视图,我只想在浏览器DOM之外的环境中编译它们.
代替将规范的ember.js加载到节点中,是否有一组特定的文件可以从ember repo中获取并用于编译我的模板?
编辑
我做了一个很好的修复工具,但是可维护性得到了F.我抓住所有Handlebars代码减去window对象的引用.然后,我跟着一起Ember.Handlebars.Compiler代码,替换Ember.create用Object.create,我的出口Ember对象,中提琴工作的事情在节点看似巨大(如在它的工作原理和所产生的功能模板).但由于前面提到的维护失误,我不认为这是对我自己的问题的答案,所以仍然可以回答.
编辑2
以上结果证明是完全失败.也许这个程序有问题,但使用Ember.Handlebars.precompile或Ember.Handlebars.compile不起作用.模板已经完成,但是当我在代码中使用附加到Ember.TEMPLATES的预编译模板时,它们不起作用.我们似乎只能在修改后的脚本标记中明确传递模板时才能使模板工作,如emberjs.com网站上所示.
编辑3 我弄清楚我做错了什么.我的答案如下.
我正在使用Emebr JS的入门套件,并在应用程序模板中添加了一个带有{{action hello}}的简单锚标签.
我正在使用把手预编译器预编译模板.当我试图运行它时,它会抛出一个错误.
未捕获错误:无法找到属性"操作"
以前我曾经用ember-1.0.pre.js做同样的事情,工作正常.但是当我包含新的ember库(ember-1.0.0-pre.2.js)时,它就抛出了这个错误.
在这两种情况下,我使用的是Handlebars-1.0.rc.1.min.js.
任何人都可以帮我解决问题.下面列出了我正在使用的把手和库的详细信息.
用车把预编译器编译的模板.application.handlebars
<h1>Hello from Ember.js</h1>
<a {{action hello}}>Say Hello!</a>
Run Code Online (Sandbox Code Playgroud)
我的HTML页面:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.2.min.js"><\/script>')</script>
<script src="js/libs/handlebars-1.0.0.beta.6.js"></script>
<script src="js/libs/ember-1.0.0-pre.2.min.js"></script>
<script src="handlebars/compiled/views.handlebars.js"></script>
<script src="js/app.js"></script>
Run Code Online (Sandbox Code Playgroud)
views.handlebars.js包含已编译的把手.
App.js:
var App = Ember.Application.create();
App.ApplicationController = Ember.Controller.extend();
App.ApplicationView = Ember.View.extend({
templateName: 'application'
});
App.Router = Ember.Router.extend({
root: Ember.Route.extend({
index: Ember.Route.extend({
route: '/'
}),
hello: function() {
console.log("Hello and Welcome");
}
})
})
App.initialize();
Run Code Online (Sandbox Code Playgroud)