我想在电路板上添加一些卡片,所有卡片都非常不同。所以我想为每张可以绑定不同事件和模板的卡片创建不同的视图。我在卡片模型中设置了一个'type'属性来区分卡片。
董事会模板如下所示:
{{#each card in cards}}
{{render card.type card class="card"}}
{{/each}}
但是,渲染帮助的第一个参数不能是变量,它只能是卡片视图名称字符串。
谁知道怎么做到这一点?答案 0 :(得分:2)
正如您已经提到的,内置render
帮助程序只接受一个字符串来查找要呈现的模板,因此一种可能的解决方案是编写自己的自定义render
帮助程序,然后获取card.get('type')
的正确名称将呈现委托给内置render
帮助程序。这看起来像这样:
Ember.Handlebars.registerBoundHelper('renderCard', function(context, card, options) {
return Ember.Handlebars.helpers.render.call(context, card.get('type'), 'card', options);
});
之后,您可以在模板中使用它:
{{#each card in cards}}
{{renderCard this card}}
{{/each}}
我还添加了一个显示正常工作的基本jsbin。
再次编辑jsbin,使用对象数据渲染到模板中see here。
可悲的是,DS.FixtureAdapter
不支持embedded
记录,这是您需要的记录。但是你可以像这样配置你的DS.RESTAdapter
:
App.Adapter = DS.RESTAdapter.extend();
App.Adapter.map('App.Dashboard',
cards: {embedded: 'always'}
);
App.Store = DS.Store.extend({
adapter: App.Adapter
});
这样card
记录always
加载了父记录。我想这样做会改变你手柄助手中对card.get('type')
的调用会返回值而不是undefined
。
希望它有所帮助。
答案 1 :(得分:0)
对于Ember 1.9上面的解决方案并不起作用。使用其他方式注册助手:
Ember.Handlebars.registerHelper 'renderDynamic', (context, model, options)->
contextString = options.hash.contextString
model = options.data.view.getStream(model).value()
return Ember.Handlebars.helpers.render(model.get('type'), contextString, options)
在模板中:
= hb 'renderDynamic "this" currentModel contextString="curremtModel"
或在把手中:
{{renderDynamic "this" currentModel contextString="curremtModel"}}