我有一個與this question類似的問題,我無法找到解決方案。在視圖重置表格時未觸發敲除綁定
<div class="validation-summary-errors">
<span data-bind="visible: $root.addErrors().length > 0">Please correct the following errors:</span>
<!-- ko foreach: $root.addErrors -->
<ul data-bind="text: error"></ul>
<!-- /ko -->
</div>
我有這樣的約束力和在js我有這兩種方法和observableArray
this.addErrors = ko.observableArray();
this.deactiveAddForm = function() {
self.addFormIsActive(false);
self.hasReminder(false);
self.addErrors([]);
utils.resetForm('addEventForm');
};
this.add = function() {
var form = document.getElementById('addEventForm');
if ($(form).valid()) {
$.ajax({
url: form.action,
type: form.method,
data: $(form).serialize()
}).done(function (result) {
if (result.valError) {
self.addErrors(ko.utils.arrayMap(result.addErrors, function (addError) {
return { error: addError };
}));
} else {
self.deactiveAddForm();
submissionSuccess(result.groups);
}
}).fail(function (jqXHr, textStatus, errorThrown) {
self.addErrors([{ error: errorThrown }]);
});
}
return false;
};
的問題是,調用utils.resetForm(「addEventForm」)防止結合工作所以錯誤不會顯示在視圖中(儘管存在於可觀察數組中)。
下面是這個方法
resetForm: function (id) {
var addForm = $(document.getElementById(id));
if (addForm.length > 0) {
addForm[0].reset();
// Clear the inputs
addForm.find('input:text, input:password, input:file, select, textarea').val('');
addForm.find('input:radio, input:checkbox').removeAttr('checked').removeAttr('selected');
$(".selectMenu").trigger("liszt:updated");
}
},
我不能self.addErrors.valueHasMutated觸發它()
是否有強迫可見結合工作的一種方式?
感謝
你不應該這樣做.. 。你確定this.addErrors和self.addErrors引用同一個上下文中的同一個對象嗎?你在哪裏定義自己的代碼? –
是的,他們在viewmodel中我定義var self = this在它的開頭。 – mitomed
而不是'this.addErrors'做'self.addErrors'並宣佈自己爲你的視圖模型的第一個語句與同爲'this.deactiveAddForm'和'this.add' – Armand