6

对于我的 EmberJS 应用程序,我预编译了所有车把模板,因此它们被加载为直接的 Javascript 文件。

问题是这些预编译的模板没有像我想象的那样进入 Ember 容器 - 当我为我的视图指定模板时出现以下错误。

Uncaught Error: assertion failed: You specified the templateName "application" for <MyApp.ApplicationView:ember164>, but it did not exist. 

这是我的视图代码。

window.MyApp.ApplicationView = Ember.View.extend({
   templateName: 'application'
});

我单步执行,发现 Ember 容器中不存在视图。我需要做一些特别的事情来向容器注册预编译的模板吗?如果是这样,怎么做?

编辑:我一直在用车把 npm 包编译模板。

4

3 回答 3

3

查找模板Ember.TEMPLATES(这只是一个以模板名称为键的哈希)

所以当你的例子ApplicationView被执行时,它会在Ember.TEMPLATES['application']

于 2013-03-01T23:25:23.453 回答
1

虽然 npm handlebars 编译器确实可以正确编译它们,但您仍然需要使用 Ember 注册它们才能正确加载它们。您可以执行以下操作之一:

  • 使用 Ember.TEMPLATES['sometemplate'] = COMPILED TEMPLATE 手动加载它们。这行得通,但变得有点痛苦。
  • 使用像 npm ember-precompile 这样的特殊编译器,它将以这样一种方式编译它们,使编译后的模板自动注册到 Ember 模板容器中。
于 2013-03-02T16:20:37.890 回答
0

如果您更喜欢基于 Ruby/Guard 的解决方案,请在此处查看我的要点:https ://gist.github.com/perlun/5286391

从您的 Guardfile 中像这样使用它:

guard 'ember_handlebars',
    :input => 'app/handlebars_templates',
    :output => 'app/handlebars_compiled',
    :remove_prefix => 'app/handlebars_templates/' do
  watch(%r{app/handlebars_templates/(.+\.handlebars)})
end

```

于 2013-04-01T17:38:20.087 回答