我有一个使用以下模板呈现列表元素的视图:
{{#each item in controller}}
{{view App.ItemView}}
{{/each}}
我需要每个项目的id为相应itemView的id。这是我的第一次尝试,但它不起作用:
App.ItemView = Ember.View.extend({
elementId: Ember.computed(function(){
return this.getPath('item.id');
}),
templateName: 'item'
});
我做错了什么?
找到一个解释我问题的方法答案 0 :(得分:2)
目前视图需要计算elementId
属性,item
尚未设置,所以这里出现了问题......
如果要在项目可用时设置id,则必须允许Ember检索要更改的DOM元素...这意味着Ember必须设置元素的id! 换句话说,就像今天一样,Ember使用元素id来保持对其DOM拥有/控制元素的引用。
然而,视图将显示的项目绑定到它,因此您可以稍后检索该项目。您究竟需要什么?
修改强>
以下是根据项目ID:http://jsfiddle.net/MikeAski/ZAHxm/
的自定义元素类示例答案 1 :(得分:2)
以上答案对我有帮助。最后,我想将视图包装标签的ID属性专门设置为模型的ID。我发现你可以使用视图的didInsertElement钩子来实现这一点,方法是使用this.get('context')访问当前呈现的元素的上下文.get('anyProperty')和DOM元素本身(作为jQuery对象)。$ ()。似乎啰嗦但却看不清楚。
App.MyView = Ember.View.extend({
templateName: 'MyTemplate',
didInsertElement: function(e){
this.$().attr('id', this.get('context').get('id'));
}
});