Ember,在动态模板中呈现内容

时间:2015-07-24 21:38:32

标签: javascript ember.js ember-cli htmlbars

我遇到了一些砖墙,如何使用Ember v1.13.1在一些我无法控制的动态HTML内容中呈现内容。在这个特定的场景中,我从服务调用获取导航头和导航脚并将它们放入我的组件中:

export default Ember.Component.extend({
  // I don't control these. They come from somewhere else
  bodyStart: '<div class="header">...</div><div class="contentBody">',
  bodyEnd: '</div><footer>...</footer>',
});

因此,在我的组件模板中,我尝试执行以下操作:

{{{bodyStart}}}
{{yield}}
{{{bodyEnd}}}

我希望将收益率内容放在<div class="contentBody">元素中,但事实并非如此。而是在{{yield}}之前关闭内容正文,并忽略bodyEnd结束div。

我可能只是遗漏了一些明显的东西。如何解决这个问题的任何想法将不胜感激。

干杯

1 个答案:

答案 0 :(得分:1)

我相信会发生的事情是每个{{{variable}}}都是独立构建的,并且独立地插入到DOM中,从而导致未关闭的DOM节点被关闭。我能想到的唯一方法是包含模板编译器并使用bodyStart和bodyStop重新编译模板。

App.ContentWrappedComponent = Ember.Component.extend({
  startBody: '',
  endBody: '',
  layout: function(){
    return Ember.HTMLBars.compile(
      this.get('bodyStart') + 
      '{{yield}}' + 
      this.get('bodyEnd')
    );
  }.property('bodyStart', 'bodyEnd')
});

您还需要添加到Brocfile.js:

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

JSBin:http://emberjs.jsbin.com/ticituxapa/3/edit?html,css,js,output