0

knockout.validation プラグインを使用しようとしています。配列にエントリを作成するときに、重複する配列項目をチェックするためのカスタム検証ルールを作成したいと思います。私はこれを試しました:

ko.validation.rules['duplicate'] = {
    validator: function (val1, val2) {

    },
    message: 'The value is already exist'
};

ko.validation.registerExtenders();

val1これが配列で、 extendval2メソッドで渡されるパラメーターです。問題は、カスタム検証関数から配列に現在入力されている項目にアクセスする方法がわからないことです。お願い助けて ?

4

1 に答える 1

1

問題をひっくり返した方がうまくいきます。追加しようとしているテキスト オブザーバブル (複数のフィールドが含まれる場合はオブザーバブル オブジェクト) に検証を追加します。次に、追加をトリガーするときに、オブザーバブルが有効かどうかを確認します。有効な場合は、配列に追加します。

http://jsfiddle.net/jearles/XY9XH/

--

<span>New Item: <input data-bind="value:newItem" /> <button data-bind="click: addItem">Add</button></span>
<div data-bind="foreach: items">
    <span data-bind="text: $data"></span>
</div>​

--

ko.validation.rules['duplicate'] = {
    validator: function (item, array) {
        return array.indexOf(item) == -1;
    },
    message: 'Value already exists!'
};
ko.validation.registerExtenders();

var ViewModel = function() {
    var self = this;
    self.items = ko.observableArray();
    self.newItem = ko.observable().extend({duplicate: self.items});
    self.addItem = function() {
        if (self.newItem().length > 0 && self.newItem.isValid()) {
           self.items.push(self.newItem());
           self.newItem(null);
        }
    };
}

ko.applyBindings(new ViewModel());    

</p>

于 2012-10-20T16:25:03.453 に答える