这里是jsbin http://emberjs.jsbin.com/wumufifasu/edit?html,js,output输入,可以输入项目的ID,其文本将显示在附近。 但是有两个项目具有相同的“id”属性,因此要显示正确的文本,可以从底部的列表中选择它们。
使用“手动选择”itemId只更改一次 - 第一次,之后没有设置,随后不会触发观察itemId的“itemText”CP。
奇怪的是,这种效果是由“itemText”CP的设置值引起的,而this.setProperties({'itemId': item.id, 'itemText': item.text});
替换为this.setProperties('itemId', item.id);
时不会发生
为什么?
答案 0 :(得分:1)
属性既不能是计算属性,也不能是您设置的属性。如果设置什么是计算属性,则设置的值会破坏计算属性定义。该属性成为一个简单的价值。您必须决定:您是否希望Ember计算属性,或您想自己设置吗?
(实际上,有一个设置计算属性的概念。但它需要以特殊方式编写计算属性定义。这里不需要。如果您对此功能感兴趣,请参阅http://guides.emberjs.com/v1.10.0/object-model/computed-properties/#toc_setting-computed-properties )。
问题是,您使用重复的ID - 不是一个好主意。当用户单击其中一个项目时,您将项目本身作为参数传递给操作,但是从项目的ID传递,因为存在重复的ID,在控制器操作中您无法再找到正确的方法ID中的项目。我建议在循环中添加index
参数,然后将其作为动作参数传递回来。
顺便说一下,为什么要在组件中定义items
?它复制了用作模型的items
。您应该将模型传递给组件。
请参阅http://emberjs.jsbin.com/likazerune/1/edit?html,js,output。
答案 1 :(得分:1)
for ember 2/3
您可以直接使用get
和set
方法保存计算:
...
yourProperty: computed('propertyForComputation', {
get(key) {
// logic here
},
set(key, value) {
// logic here
},
}),
...