Knockout.js 正在验证普通可观察array()
假设我的模型非常简单(字符串列表),我不想将类型化对象放入Knockout.js 正在验证普通可观察array(),knockout.js,knockout-validation,Knockout.js,Knockout Validation,假设我的模型非常简单(字符串列表),我不想将类型化对象放入observatarray并使用深度验证ko.validation.init({grouping:{deep:true}}) 例如,我希望所有数组元素(纯字符串)都符合minLength:3 为什么ko.observable().extend({minLength:3})可以,但是ko.observable().extend({minLength:3})不起作用 除了将对象(而不是普通字符串)放入数组之外,还有其他解决方法吗 拨弄到。好吧
observatarray
并使用深度验证ko.validation.init({grouping:{deep:true}})
例如,我希望所有数组元素(纯字符串)都符合minLength:3
为什么ko.observable().extend({minLength:3})
可以,但是ko.observable().extend({minLength:3})
不起作用
除了将对象(而不是普通字符串)放入数组之外,还有其他解决方法吗
拨弄到。好吧,您可以在
observableArray
原型上创建一个minLength
函数,如下所示:
ko.observableArray.fn.stringMinLength = function (minLength) {
var self = this;// observableArray
// Loop through array and apply logic to each element
// Add subscriptions to the observableArray to determine what's been added (don't care about what's been removed)
// In the subscriptions, deal with how to apply the minLength validation
// -can't use '.extend({ minLength: minLength })' because these are plain strings, not observables
return self;
}
现在你可以这样做了:
var oa = ko.observableArray(["foo", "bar", "bo"]).stringMinLength(3);
问题的关键是,当
oa
的值发生变化时,您希望如何对所有字符串元素应用验证。哦,这对于将验证规则简单扩展到observableArray的成员来说太多了。。。我最好为我的数组使用人工对象,我可以很容易地扩展:ko.observable([{value:ko.observable(“foo”).extend({minLength:3})},…])
是的,我可能也会这样做。您可以查看映射插件来为您映射数组中的这些对象。或者只需创建一个简单的构造函数,以字符串形式传递,并创建一个int,该int返回一个对象,该对象的值属性是可观察的,其minLength设置为传递的int<代码>ko.observableArray([新项目('foo',3),新项目('bar',3),新项目('bo',3)等])
。有很多方法可以做同样的事情,这是一种祝福,也是一种诅咒。