나는 많은 스레드를 읽었으며 두 개의 관찰 가능한 배열을 계산하고 추가 / 제거를 추적하고 계산 된 관찰 가능한 항목을 업데이트 할 수있는 방법에 대한 정보가 충분하지 않습니다. 두.
다음은 JsFiddle입니다.
다음은 그 뒤에있는 코드입니다.
var VM = function () {
var self = this;
self.first = ko.observableArray([{
Id: 1,
name: "john"
}, {
Id: 3,
name: "steve"
}, {
Id: 5,
name: "roger"
}]);
self.second = ko.observableArray([{
Id: 2,
name: "laker"
}, {
Id: 4,
name: "don"
}, {
Id: 6,
name: "idiot"
}]);
self.both = ko.computed(function () {
return self.first().concat(self.second());
});
self.removePerson = function (v) {
(self.first().indexOf(v) !== -1) ? ko.utils.arrayRemoveItem(self.first(), self.first()[self.first().indexOf(v)]) : ((self.second().indexOf(v) !== -1) ? ko.utils.arrayRemoveItem(self.second(), self.second()[self.second().indexOf(v)]) : console.log("Item doesnt exist"));
}
}
ko.applyBindings(new VM());
어떻게 만들 수 있습니다 computed
에 대한 모든 변경 후 갱신 first
또는 second
?
당신의 계산은 괜찮고, 당신 removePerson
은 잘못 작동합니다.
따라서 UI에서 변경 사항을 보지 마십시오. UI를 사용할 때 ko.utils.arrayRemoveItem
기본 배열에서 항목을 제거하므로 KO는 변경 사항을 알지 못하므로 계산 된 내용을 업데이트하지 않습니다.
valueHasMutated()
제거 후 배열에서을 호출하도록 수정하는 한 가지 방법 은 계산 된 변경을 트리거합니다. ( 데모 )
또는 대신 myObservableArray.remove(someItem)
방법 ( doc 참조 )을 사용할 수 있습니다 .
self.removePerson = function (v) {
(self.first().indexOf(v) !== -1)
? self.first.remove(v)
: self.second.remove(v)
}
데모 JSFiddle.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다