4

我创建了一个 CMS,可以在其中使用 HTMLbars 创建模板。模板应该在客户端编译,并且有应该显示模板的组件。我将组件的模板属性设置为使用 HTMLBars 返回已编译模板的函数。

import Ember from 'ember';

export default Ember.Component.extend({
  content: null,
  template: function () {
    return Ember.HTMLBars.compile(this.get('content.template'));
  }
}

我在我的 Brocfile 中包含了 ember-template-compiler。

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

也测试了

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

但是模板永远不会被渲染。

4

1 回答 1

4

它应该是一个属性,在组件上应该是layout,但它只会被评估一次,因此更新内容不会重建模板。

http://emberjs.jsbin.com/vayereqapo/1/edit?html,js,输出

Ember.Component.extend({
  content: {template: 'Hello'},
  layout: function () {
    return Ember.HTMLBars.compile(this.get('content.template'));
  }.property()
});

模板内容更改时重新渲染:

App.FooBarComponent = Ember.Component.extend({
  content: {template: 'Hello'},
  foo: function(){
    var self = this;
    Em.run.later(function(){
      self.set('content.template', 'Bye');
      self.rerender();
    }, 3000);
  }.on('init'),
  layout: function () {
    return Ember.HTMLBars.compile(this.get('content.template'));
  }.property('content.template')
});

http://emberjs.jsbin.com/qbuxuxasu/1/edit

于 2015-05-19T06:11:13.017 回答