我正在学习余烬,我有一个问题:我应该把模板文件放在哪里?假设我使用requirejs来模块化我的应用程序。如果我在初学者工具包中定义我的index.html
:
<script type="text/x-handlebars">
<h2>Welcome to Ember.js</h2>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each item in model}}
<li>{{item}}</li>
{{/each}}
</ul>
</script>
我的应用正常运行。但是,如果我想将index
模板移动到项目中的另一个文件,请说js/templates/index.html
。我怎么告诉ember,模板在那个目录中?在这种情况下我是否必须使用视图? Route有renderTemplate
方法,但我不知道怎么告诉它从目录中取出模板:
define(['ember','text!templates/index.html'],function(ember, indexTemplate){
var IndexRoute = Ember.Route.extend({
renderTemplate: function(){
this.render(indexTemplate); // clearly this is not the solution, I just don't know how to refer to the indexTemplate.
},
model: function(){
return ['red','blue','yellow'];
}
});
return IndexRoute;
});
由于renderTemplate
方法等待确定要呈现的模板名称的字符串,我不知道如何告诉ember,模板实际上在另一个文件中,而不是在应用程序的{{1 },但在index.html
。
答案 0 :(得分:1)
基本上对于require.js
,您根本不需要使用renderTemplate
来渲染模板。如果您不需要在视图中执行额外的操作,则甚至不需要定义视图。此外,您可以将index.html
中定义的模板分隔为单独的把手文件*.hbs
或*.handlebars
,然后按正确的顺序加载此模板文件。
查看使用require.js
加载项目文件的项目:
答案 1 :(得分:1)
使用Ember.js时,根本不必使用require.js
。 Ember.js使用Handlebars作为其模板引擎,因此您可以将文档编写为单独的文件,其名称应以.handlebars
或.hbs
结尾。
然后,您需要预编译模板文件,此过程要求您使用Node.js
和npm
,这会导致所有模板文件成为一个javascript文件。毕竟,您只需在条目HTML中链接此文件,将其放在链接到ember.js
的位置之后,以便Ember识别这些模板的名称。这就是为什么所有View
类都知道其renderTemplate
属性的名称。
如果你有大量的模板,你不希望只在一个.js
文件中加载它们,你可以选择单独编译它们并使用require.js
来管理依赖项之后,这对Ember来说很好。
要查看有关Handlebars预编译的更多信息,请查看以下链接:http://handlebarsjs.com/precompilation.html