我正在使用ember应用程序(1.11)并且遇到计算属性的问题,当代码更新时,它没有更新值。代码如下(已修剪,仅显示相关代码段)。
在迭代通过作为计算属性的“数据”时显示UI上的事物列表。然后我从下拉列表中做出选择,我发送一个动作,触发该计算属性并将内容添加到该列表中。当我这样做一次时,我在UI上获得了所有更新的列表或迭代,但是当我再次进行选择以增加列表/迭代时,计算属性将获取列表的初始值,而不是更新的列表,我只是添加了一个项目,因此没有显示正确的细节。
我没有得到什么问题。我也无法创造一个旋转,因为它有很多代码,并且在错误中陷入了错误。
父组件 - ehbs
{{pax-detail list=list}}
父组件 - js
list: function(){
return this.get('arr') //This arr comes from route/controller via query string in url
}.property('arr')
Pax Detail Component- ehbs
{{pax-select action="changed"}}
{{ages ageData=data}}
Pax Detail Component - js
countChanged: '',
actions: {
changed: function(e){
this.set('countChanged',e.target.value)
}
},
data : function(){
var arr = this.get('list')
// doing lot to manipulation - constructing arr/object
if(this.get('countChanged')){
arr.pushObject({}) // basically modifying the initial arr
return arr
} else {
return arr
}
}.property('list','countChanged')
Pax选择组件 - ehbs
<select>
<option>0</option>
<option>1</option>
<option>2</option>
</select>
Pax选择组件 - js
change: function (e) {
this.sendAction('action',e)
}
答案 0 :(得分:1)
如果您的示例(更改内容,但数组相同),您的arr
不会更改
尝试下一个表格
.property('arr.[]')
或.property('arr.length')
或手动调用.notifyPropertyChange('list')
修改数据。
事实上,你的例子就是
list: Ember.computed.alias('arr')
答案 1 :(得分:0)
我尝试的是,无论我在计算属性“data”中的“if”条件内做什么,我都将其移动到动作本身。然后我发现它开始工作了。更不用说了,我不得不使用arr。[],因为据我所知,如果数组的项目正在改变,我需要收听所有项目。 我仍然不确定,为什么会这样,但我想会发布这个。