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)似乎是正确的方法,但显然我遗漏了一些东西。更加灵活。谢谢