我是一種ko.computed,我希望應該根據observableArray上的添加/刪除操作進行更新,但它沒有,所以我可能在這裏丟失了重要的東西。所以,我有一個觀察的陣列,在這裏它是:Ko.computed沒有更新
vm.selTopics({
topics: [],
members: [],
children: []
});
然後我對主要議題陣列中的項目列表中的複選框,我打印應用計算每個項目的列表。只要在vm.selTopics()中添加或刪除一個項目,就可以隨時更新計算結果,並隨時在vm.selTopics()中找到該項目時複選該複選框。下面是代碼:
member.isSelected = ko.computed({
read: function(){
if(_.where(vm.selTopics().members, { id: member.tid, topicId: topic.tid }).length > 0){
return true;
}
},
write: function(val){
if(_.where(vm.selTopics().members, { id: member.tid, topicId: topic.tid }).length === 0) {
vm.selTopics().members.push({
id: member.tid,
label: member.label,
topicId: topic.tid
});
} else {
vm.selTopics().members.splice(_.findIndex(vm.selTopics().members, { id: member.tid, topicId: topic.tid }),1);
}
}
});
然後我已經另一個計算其表示一個複選框,如果選中,檢查當前部件複選框以及那些其孩子。這裏它代碼爲:
member.isActive = ko.computed({
read: function(){
if(member.children.every(function(c){ return c.isSelected() }) && member.isSelected()){
member.isOn('isOn');
return true;
} else {
member.isOn('');
}
},
write: function(val){
if(member.children.every(function(c){ return c.isSelected() }) && member.isSelected()){
member.isSelected(false);
member.children.forEach(function(c){
c.isSelected(false);
});
} else {
member.isSelected(true);
member.children.forEach(function(c){
c.isSelected(true);
});
}
}
});
但是,當我點擊這個複選框member.isSelected計算不會得到重新評估。 (只是要確切地說,vm.selTopics()是一個單維數組,之前一切正常......)。也許我錯過了關於觸發器如何工作的一些重要部分。謝謝你的幫助。
UPDATE
下面是HTML:
<input\
type="checkbox"
name="topics"
data-bind="
checked: isSelected,
value: tid,
">
<!-- Checkbox to select current member & its children -->
<label data-select="multi" data-bind="
css: isOn,
visible: $data.children.length,
event: { mouseover: $component.highlight, mouseout: $component.unlight },
">
<input type="checkbox"
data-bind="checked: isActive"
>
</label>
<!-- /ko -->
嗨,分享HTML,看看你是如何綁定屬性 – frankfg