我正在尝试创建一个验证摘要,其中包含指向KnockoutJS 验证库的错误的链接列表,我需要创建一个自定义的 foreach 处理程序来呈现它。
通过下面的代码,我想要实现的是能够监听 errors() 列表中的变化并构建验证摘要。我实际上并没有使用“错误”列表(因为它只是一个字符串列表),而是使用它来监听更改。
从我所看到的(有点相关)我的范围错误 - 因为在“ko.applyBindingsToDescendants”中需要子元素的 ViewModel,但我不确定如何实现这一点。
这是我当前的绑定代码:
ko.bindingHandlers.validationSummary = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
function ValidationErrorModel(fieldRef, errorMessage) {
this.fieldRef = ko.observable(fieldRef),
this.errorMessage = ko.observable(errorMessage)
}
var currentValidationModel = ko.observableArray(),
$validationElements = $(".validationElement");
$validationElements.each(function (i, elem) {
var $elem = $(elem),
validationErrorModel = new ValidationErrorModel("#" + $elem.attr("name"), $elem.attr("title"));
currentValidationModel.push(validationErrorModel);
});
console.log(currentValidationModel());
ko.applyBindingsToDescendants({ foreach: currentValidationModel }, element);
return { controlsDescendantBindings: true };
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
}
};
还有我的模板:
<ul data-bind="validationSummary: errors">
<li>
<a data-bind="attr: { href: fieldRef }, text: errorMessage"></a>
</li>
</ul>