2015-06-30 66 views
1

这里是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); 为什么这么不发生?

回答

2

一个属性不能既是一个计算属性也是一个你设置的属性。如果您设置什么是计算属性,则您设置的值会破坏计算出的属性定义。该物业成为一个简单的价值。你必须决定:你想让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

+0

感谢您清除设置CP细微差别。 jsbin代表应用程序的简化模型,其中没有模型,并且是以其他方式设计的,但我将在下一个项目中考虑这一点。 – lessless