ember如何选择模板

时间:2013-06-21 16:19:25

标签: web-applications ember.js requirejs handlebars.js

我正在学习余烬,我有一个问题:我应该把模板文件放在哪里?假设我使用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

2 个答案:

答案 0 :(得分:1)

基本上对于require.js,您根本不需要使用renderTemplate来渲染模板。如果您不需要在视图中执行额外的操作,则甚至不需要定义视图。此外,您可以将index.html中定义的模板分隔为单独的把手文件*.hbs*.handlebars,然后按正确的顺序加载此模板文件。

查看使用require.js加载项目文件的项目:

  1. https://github.com/sh4n3d4v15/ember-todos
  2. https://github.com/stephenplusplus/todomvc/tree/emberjs_require/dependency-examples/emberjs_require
  3. https://bitbucket.org/cprecourt/ember-requirejs-example/src
  4. 希望它有所帮助。

答案 1 :(得分:1)

使用Ember.js时,根本不必使用require.js。 Ember.js使用Handlebars作为其模板引擎,因此您可以将文档编写为单独的文件,其名称应以.handlebars.hbs结尾。

然后,您需要预编译模板文件,此过程要求您使用Node.jsnpm,这会导致所有模板文件成为一个javascript文件。毕竟,您只需在条目HTML中链接此文件,将其放在链接到ember.js的位置之后,以便Ember识别这些模板的名称。这就是为什么所有View类都知道其renderTemplate属性的名称。

如果你有大量的模板,你不希望只在一个.js文件中加载它们,你可以选择单独编译它们并使用require.js来管理依赖项之后,这对Ember来说很好。

要查看有关Handlebars预编译的更多信息,请查看以下链接:http://handlebarsjs.com/precompilation.html