我有一个值的控制器。
App.xcontroller = SC.ArrayController.create({
...some code...
array_values = [],
..more code...
})
现在我在某个视图中有一个这个valueBinding
valueBinding: 'App.xController.array_values',
当我更改数组中的值时,视图不会更新。但是当我这样做的时候 控制器中的以下内容:
var array_values = this.get('array_values');
... adding / removing values to the array....
if (x_values.contains(x)){
x_values.removeObject(x)
} else {
x_values.pushObject(x);
};
this.set('array_values', array_values.copy());
绑定有效,视图会更新。但只有副本()。 我不想复制数组,恕我直言这不高效。我只想 让valueBinding知道内容已经改变了..
x值只是一堆整数。
我想要这个的原因:我想更改SegmentedItemView的值键。我想更改活动按钮。但我不知道我有多少分段视图 所以我想我将每个生成的分段视图的值绑定到一些常见的数组,并更改该公共数组,以便能够更改所有分段视图上的活动按钮。由于每个按钮代表一个具有唯一键的项目,因此工作正常。除了我每次都必须复制数组。
答案 0 :(得分:1)
content
xcontroller
属性
arrangedObjects
xcontroller
属性
addObject
和removeObject
方法。 SC中的数组已经使用pushObject
方法(以及其他方法)进行了扩充,这也符合KVO标准。因此,如果您使用KVO方法,视图应该更新。您的视图未更新的原因是您绑定到数组,但数组本身没有更改。当您执行复制时,阵列本身会更改,因此绑定会触发。
您可能还想尝试
this.notifyPropertyChange('x_values');
,但这不如使用内置KVO功能更好。