我们如何观察Ember中数组的变化?我有ember组件使用模型中的原始对象数据,但为了演示我在组件本身使用数组属性的问题,如:
init:function(){
this._super();
var arr = Ember.A([
Ember.Object.create({"shelfNo": 1, "noOfItems": 2}),
Ember.Object.create({"shelfNo": 2, "noOfItems": 3}),
Ember.Object.create({"shelfNo": 3, "noOfItems": 2})]
);
this.set("someArray",arr);
//DOES NOT WORK
this.get('someArray').addArrayObserver(function () {
Ember.ObjectController.create({
arrayWillChange: function (observedObj, start, removeCount, addCount) {
console.log("in arrayWillChange");
},
arrayDidChange: function (array, start, removeCount, addCount) {
console.log("in arrayDidChange");
}
});
});
}
我也尝试过:
testObserver: function(){
//DOES NOT WORK
console.log("here");
}.observes('someArray@each')
但两件都不适合我!
这是一个jsbin:http://jsbin.com/EkumOjA/1/
谢谢, DEE
答案 0 :(得分:6)
如果您正在观察数组中某个对象的属性,请使用someArray.@each.someProperty
。要观察数组内容何时更改(someArray.pushObject,removeObject等),请使用someArray.[]
或someArray.length
。
此外,使用init
而不是覆盖someFunc: function() {}.on('init')
这是在对象初始化时让观察者工作的安全方法。
这是您更新的代码:
App.ShowQuestionComponent = Ember.Component.extend({
someArray : null,
initializeSomeArray:function(){
var arr = Ember.A([
Ember.Object.create({"shelfNo": 1, "noOfItems": 2}),
Ember.Object.create({"shelfNo": 2, "noOfItems": 3}),
Ember.Object.create({"shelfNo": 3, "noOfItems": 2})]
);
this.set("someArray",arr);
}.on('init'),
testObserver: function(){
console.log("here");
}.observes('someArray.[]')
});
您更新的jsbin http://jsbin.com/EkumOjA/2/edit