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)等])
。有很多方法可以做同样的事情,这是一种祝福,也是一种诅咒。