将hbs模板作为单独的文件

Did*_*nov 19 ember.js

我想在他们的第一页上运行ember.js(版本1.0.0 Final)示例.

他们将每个车把模板分成带有.hbs扩展名的单独文件.

所以我只是复制了所有代码并创建了具有相同名称的文件.当我跑它们时,什么都没有.我正在尝试ROUTING的例子.

我的index.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Ember Starter Kit</title>
    <link rel="stylesheet" href="css/normalize.css">
    <link rel="stylesheet" href="css/style.css">
    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/bootstrap-theme.css">
</head>
<body>

  <script src="js/libs/jquery-1.9.1.js"></script>
  <script src="js/libs/handlebars-1.0.0.js"></script>
  <script src="js/libs/ember-1.0.0.js"></script>
  <script src="js/libs/bootstrap.js"></script>
  <script src="js/app.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的模板在根目录中,我将它们复制到/templates但是没有帮助.

the*_*ack 23

当您在不同文件中有模板时,您必须加载它们并编译它们,因为EmberJS不检测文件.有几种方法可以做到这一点.

1)Ember.TEMPLATES 将它们加载到: Ember加载模板并将它们推入对象Ember.TEMPLATES.它small name根据EmberJS命名约定使用密钥存储模板内容.所以我们自己可以在编译后推送模板.

例如:如果你有一个名为'post'的模板,请post.hbs通过AJAX请求加载文件然后设置,

// "data" is html content returned from Ajax request
Ember.TEMPLATES['post'] = Ember.Handlebars.compile(data) 
Run Code Online (Sandbox Code Playgroud)

所以现在你可以直接访问模板了

   {{partial 'post'}} 
Run Code Online (Sandbox Code Playgroud)

在把手中设置templateName为任何视图类.

App.OtherView = Ember.View.extend({
   templateName: 'post'
});
Run Code Online (Sandbox Code Playgroud)

因此,您可能必须通过AJAX请求最终加载所有HBS文件并在加载应用程序之前编译它们.这对应用程序来说是一个很大的开销.

为了简化这一点,我们可以预编译所有模板并将它们保存为JS(实际上将它们推送到Ember.TEMPLATES对象)并加载JS.这可以使用插件ember-templates实现,该模板也可用作grunt job grunt-ember-templates.

2)第二种方法是创建一个视图对象,并在AJAX请求之后将编译后的代码设置为每个视图的模板.文本插件requirejs可以帮助您实现这一目标.

如今,Ember人建议不要创建一个视图对象,除非有必要,我建议你按照第一种方式.预编译的选项是最佳选择,每次创建模板时都会减少大量工作.

更新:有一些项目构建工具负责编译把手模板.YeomanEmber-Cli是你可以看一次的.