Ember.js EmberJS registerHelper在Ember 1.8中动态呈现模板

Ember.js EmberJS registerHelper在Ember 1.8中动态呈现模板,ember.js,Ember.js,我希望动态呈现一个模板,如下所示: {{#each layout in layouts}} {{render layout.get('type') layout}} {{/each}} 问题在于render不希望变量作为其第一个参数,因此在较早的EmberJS版本中,可以通过注册帮助器来解决问题: Ember.Handlebars.registerBoundHelper('render_layout', function(callingContext, layout, optio

我希望动态呈现一个模板,如下所示:

{{#each layout in layouts}}
   {{render layout.get('type') layout}}
{{/each}} 
问题在于render不希望变量作为其第一个参数,因此在较早的EmberJS版本中,可以通过注册帮助器来解决问题:

Ember.Handlebars.registerBoundHelper('render_layout', 
  function(callingContext, layout, options) {
    return Ember.Handlebars.helpers.render.call(callingContext, 
                layout.get('type'), 'layout', options);
});
在模板中:

{{#each layout in layouts}}
     {{render_layout this layout}}
{{/each}} 
{{#each layout in layouts}}
     {{render_layout layout}}
{{/each}} 
不幸的是,这个东西在新的余烬版本中不起作用。
Ember.handlebar.helpers.render.call需要3个参数,但我无法正确获取它们。有什么想法吗?
我试过:
(这是layout.get('type'),选项)

在模板中:

{{#each layout in layouts}}
     {{render_layout this layout}}
{{/each}} 
{{#each layout in layouts}}
     {{render_layout layout}}
{{/each}} 
我得到
未捕获的类型错误:无法读取null的属性“pushChildView”

。。。还有很多其他的


如果您有任何建议,我们将不胜感激。

组件允许您指定
layoutName
。您可以根据传入组件的参数动态计算布局名称

App.XRenderComponent = Ember.Component.extend({
  tagName: "",
  layoutName: function(){
    return this.get('displayLayout.type'); 
  }.property('displayLayout'),
});
那你就做吧

  <script type="text/x-handlebars" id="index">
    {{#each layout in model}}
      {{ x-render displayLayout=layout }}
    {{/each}}   
  </script>

{{#模型中的每个布局}
{{x-render displayLayout=layout}
{{/每个}}

请参阅工作示例

我将首先查看
{render}
帮助程序的Ember/HBS源代码,并查看如何对其进行调整以满足您的需要。我已经这样做了,tbh(这个,layout.get('type'),options)似乎是正确的方法,但显然我遗漏了一些东西。更加灵活。谢谢