我有与此问题类似的问题,但找不到解决方案。我在视图中有这个绑定
<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() 触发它
有没有办法强制可见绑定工作?
谢谢