3

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

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

我做错了什么?

你可以在这里找到一个 jsfiddle 来说明我的问题http://jsfiddle.net/jrabary/vk4Ze/

4

2 回答 2

2

目前视图需要计算elementId属性,item尚未设置,所以这里的问题开始了......

如果您想在项目可用时设置 id,则必须允许 Ember 检索要更改的 DOM 元素……这意味着 Ember 必须设置元素的 id!换句话说,到今天为止这是不可能的,因为 Ember 使用元素 id 来保持对其 DOM 拥有/控制的元素的引用。

不过,视图绑定了显示的项目,因此您可以稍后检索该项目。你的潜在需求到底是什么?

编辑

这是一个根据项目 id 自定义元素类的示例:http: //jsfiddle.net/MikeAski/ZAHxm/

于 2012-06-12T12:12:18.267 回答
2

以上答案对我有帮助。最后,我想将视图包装标签的 ID 属性专门设置为模型的 ID。我发现您可以使用视图的 didInsertElement 钩子来实现这一点,方法是使用 this.get('context').get('anyProperty') 访问当前渲染元素的上下文,并使用 this.$ 访问 DOM 元素本身(作为 jQuery 对象) ()。似乎啰嗦,但看不到更清洁的方式。

App.MyView = Ember.View.extend({
    templateName: 'MyTemplate',
    didInsertElement: function(e){
        this.$().attr('id', this.get('context').get('id'));
    }
});
于 2013-04-28T13:05:00.167 回答