在浏览器中编译模板

时间:2015-07-27 10:15:59

标签: ember.js ember-cli

我有一个特定的用例,我需要在浏览器中编译模板。这是因为模板在开发时不可用。

import Ember from 'ember';
const myTempRouteList = ['home']; // this is retrieved from the backend

export function initialize(instance) {
  let container = instance.container;
  let Router = container.lookupFactory('router:main');

  myTempRouteList.forEach(function (name) {
    let routeName = name.dasherize();

    Router.map(function(){ // router.map is undefined here
      this.resource(routeName, {path: routeName});
    });
    container.register(`route:${routeName}`, Ember.Route.extend({}));
    container.register(`template:${routeName}`, Ember.HTMLBars.compile(`I am the template of ${routeName}`);

  }, this);
}

export default {
  name: 'register-routes',
  initialize: initialize
};

我运行它并发出以下错误:Uncaught Error: Cannot call 'compile' without the template compiler loaded. Please load 'ember-template-compiler.js' prior to calling 'compile'

所以我把它添加到我的Brocfile.js:

app.import('bower_components/ember/ember-template-compiler.js');

但是,错误仍然存​​在。

修改2015-07-29 当我将ember-template-compiler攻击到app \ index.html文件时,它可以工作:

<body>
  {{content-for 'body'}}

  <script src="//builds.emberjs.com/tags/v1.13.5/ember-template-compiler.js"></script>
  <script src="assets/vendor.js"></script>
  ....

我使用的版本:

  • Ember 1.13.5
  • Ember-cli 1.13.1

1 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案。有两件事:

  1. 我错过了将Brocfile.js重命名为ember-cli-build.js的错误。我按照Transition Guide
  2. 修正了这个问题
  3. 我需要将ember-template-compiler添加到我的构建中,方法是将{ prepend: true }传递给我的import语句:

    app.import('bower_components/ember/ember-template-compiler.js', { prepend: true });

  4. 我还删除了加载bower.json的{​​{1}}行,因为没有必要,ember-template-compiler包含在bower ember包中。