Ember.js 手动设置后,计算属性不再观察更改
这里是带有输入的jsbin,在这里可以输入项目的id,其文本将显示在附近。 但是有两个项目具有相同的“id”属性,因此要显示正确的文本,可以从底部的列表中选择它们 使用“手动选择”时,itemId仅更改一次-第一次,之后未设置,随后观察itemId的“itemText”CP不会触发 奇怪的是,这种效果是由设置“itemText”CP的值引起的,当Ember.js 手动设置后,计算属性不再观察更改,ember.js,Ember.js,这里是带有输入的jsbin,在这里可以输入项目的id,其文本将显示在附近。 但是有两个项目具有相同的“id”属性,因此要显示正确的文本,可以从底部的列表中选择它们 使用“手动选择”时,itemId仅更改一次-第一次,之后未设置,随后观察itemId的“itemText”CP不会触发 奇怪的是,这种效果是由设置“itemText”CP的值引起的,当this.setProperties({'itemId':item.id,'itemText':item.text})时不会发生替换为this.setP
this.setProperties({'itemId':item.id,'itemText':item.text})时不会发生代码>替换为this.setProperties('itemId',item.id)代码>
为什么 属性不能既是计算属性又是您设置的属性。如果设置的是计算特性,则设置的值将破坏计算特性定义。属性成为一个简单的值。您必须决定:您想让Ember计算属性,还是自己设置属性
(实际上,有一个设置计算属性的概念。但是它需要以特殊的方式编写计算属性定义。这里不需要。如果您对此功能感兴趣,请参阅)
问题是,您正在使用重复的ID——这不是一个好主意。当用户单击其中一个项目时,您将该项目本身作为参数传递给操作,但由于存在重复的ID,因此在控制器操作中,您无法再从ID中找到正确的项目。我建议在循环中添加一个索引
参数,然后将其作为动作参数传回
顺便问一下,为什么要在组件中定义项
?它复制用作模型的项。您应该将模型传递到组件中
请参阅。了解余烬2/3
您可以通过usngget
和set
方法直接保留计算:
...
yourProperty: computed('propertyForComputation', {
get(key) {
// logic here
},
set(key, value) {
// logic here
},
}),
...
感谢您清除设置CP的细微差别。jsbin表示应用程序的简化模型,其中没有模型,并且是以另一种方式设计的,但我将在下一个项目中考虑到这一点。