无法将视图的elementId设置为列表内容ID

时间:2012-06-12 11:54:09

标签: ember.js

我有一个使用以下模板呈现列表元素的视图:

   {{#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'
});

我做错了什么?

你可以在http://jsfiddle.net/jrabary/vk4Ze/

找到一个解释我问题的方法

2 个答案:

答案 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'));
    }
});