我有這個測試應用程序應該打印「過濾」和「改變」每次點擊應用程序視圖,因爲計算屬性被調用。然而屬性結合使用空數組更新屬性時才觸發:ComputedProperty沒有得到更新
window.App = Ember.Application.create({
Settings: Ember.Object.create({
filter: []
}),
ApplicationView: Ember.View.extend({
click: function(event) {
filter = App.get('Settings.filter');
console.dir(filter);
if (App.get('Room.filtered')) {
filter = filter.filter(function(item) {
return item != App.get('Room.name');
});
} else {
filter.push(App.get('Room.name'));
}
App.set('Settings.filter', filter);
}
})
});
Room = Ember.Object.extend({
name: "test",
_filterer: function() {
console.dir("changed");
}.observes('filtered'),
filtered: function() {
console.dir("filtered");
filter = App.get('Settings.filter');
for (var i = 0; i < filter.length; i++) {
if (filter[i] == this.get('name')) return true;
}
return false;
}.property('App.Settings.filter', 'name').volatile()
});
App.Room = Room.create();
setTimeout(function() {App.set('Settings.filter', ['test']); }, 3000);
這裏是jsbin:http://jsbin.com/edolol/2/edit
爲什麼設置設置爲空數組時屬性綁定,才觸發?爲什麼在超時時手動進行觸發呢?
更新
這裏是一個工作jsbin:http://jsbin.com/edolol/11/edit
是從[]到MutableArray自動發生轉換?沒有你的小修改,'。@ each'的東西就無法工作(正如你可以看到你是否從jsbin的修訂版本3到版本9一樣循環)。 – ohcibi 2013-03-01 13:48:04
是的,Ember將所有數組自動轉換爲'MutableArray'。你可以定義一個數組var a = [],並使用'a.forEach','a.pushObject','a.find'和所有其他函數。 – 2013-03-01 13:57:35