에서 녹아웃 확인 validatedObservable를 제거하는 방법을 내보기 모델의 특성에 observableArray 있습니다. 배열에 항목을 추가하는 버튼이 있습니다. 유효성이 확인 된 관찰 물 :는 관측 배열
self.newRate = function() {
var rate = new Rate({id: self.id});
rate.isEditing(true);
rate.isNew = true;
rate = ko.validatedObservable(rate);
self.vendor().rates.push(rate);
};
이 작동합니다. 항목이 배열에 추가되고보기가 업데이트됩니다. 사용자가 행을 제거 할 수 있도록 새로 추가 된 항목 옆에 취소 링크가 있습니다.
self.editRateCancel = function (item) {
if (item.isNew === true) {
self.vendor().rates.remove(item);
} else {
item.cancelEdit();
ko.utils.arrayForEach(self.unitsOfMeasure(), function (uom) {
if(item.cacheUnitOfMeasureID === uom.value) {
item.selectedUOM(uom);
}
});
}
};
remove(item)
을 호출해도 항목이 제거되지 않습니다. 항목을 확인 된 관찰 가능 항목으로 설정하지 않으면 제거가 성공합니다. remove
함수를 보면 전달 된 항목이 (valueOrPredicate) 유형이 Object, (Rate)
이고 기본 배열에서 Object, (Function)
으로 반환되는 값이므로 predicate(value)
이 반환되므로 항목이 제거되지 않습니다.
ko.observableArray['fn'] = {
'remove': function (valueOrPredicate) {
var underlyingArray = this.peek();
var removedValues = [];
var predicate = typeof valueOrPredicate == "function" ? valueOrPredicate : function (value) { return value === valueOrPredicate; };
for (var i = 0; i < underlyingArray.length; i++) {
var value = underlyingArray[i];
if (predicate(value)) {
if (removedValues.length === 0) {
this.valueWillMutate();
}
removedValues.push(value);
underlyingArray.splice(i, 1);
i--;
}
}
if (removedValues.length) {
this.valueHasMutated();
}
return removedValues;
},
어떻게 관측 배열에서 특정 검증 관찰 가능한을 제거 할 수 있습니다
KnockoutJS 기능을 제거? 사용할 수있는 유틸리티 기능이 있습니까?
세 번째 접근 방식에서 설명하는 것처럼 함수가 remove 메서드에 전달 될 수 있다는 것을 알지 못했습니다. 이것은 코드가 짧아지기 때문에 좋습니다. KnockOutJS 코드를 기반으로하는 자체 제거 함수를 작성했지만 결국 코드가 더 마음에 든다고 생각합니다. 도와 주셔서 감사합니다. – DaveB
다행스럽게도 도움이 될 수 있습니다. 실제로 질문이나 코드를보고 아이디어를 생각해 낼 때까지 그 일을 할 수 있는지 몰랐습니다. 그래서 너 덕분에! –