0

剣道グリッドに表示されたレコードのリストがあり、そこで新しいレコードをインラインで作成できます。要件は、すべてのレコードが一意の名前を持つことです。

新しいレコードを追加するとき、レコードのリストを反復処理し、追加する前に新しいレコード名が一意かどうかを確認するこの機能があります。kendo.ui.validator の拡張機能として、カスタム ルールを追加します。関数:

    //...
uniquenamevalidation: function (input, params) {
                        var errorCount = 0;
                        //check for the rule attribute
                        if (input.filter("[data-val-uniquenamevalidation]").length && input.val()) {
                            var dataSource = $("#grid").data("kendoGrid").dataSource;
                            var data = dataSource.data();
                            //iterating through all grid elements' Names, and comparing to input
                            for (var i = 1; i < data.length; i++) {
                                if (input.val() == data[i].Name) {
                                    errorCount++; //if there are any matches, increase error count
                                }
                            }
                        }
                        console.log(errorCount == 0); 
                        return errorCount == 0;//returns TRUE if there are no matches, therefore input is unique
                    }

入力が無効な場合、関数はfalseを返し、検証は失敗するはずです。期待どおりの適切なエラー メッセージで失敗します http://snag.gy/d5TZR.jpg

問題: 入力が有効な場合、関数はtrueを返し、検証に合格する必要があります。この不可解なエラーが表示され、続行できません。 http://snag.gy/syxds.jpg

4

1 に答える 1

0

そのため、Telerik Demos に関して、関数の最後に "return true" ステートメントがないことに気付きました。このように見えるはずです

uniquenamevalidation: function (input, params) {
                    var errorCount = 0;
                    //check for the rule attribute
                    if (input.filter("[data-val-uniquenamevalidation]").length && input.val()) {
                        var dataSource = $("#grid").data("kendoGrid").dataSource;
                        var data = dataSource.data();

                        for (var i = 1; i < data.length; i++) {
                            if (input.val() == data[i].Name) {
                                errorCount++;
                            }
                        }
                        return errorCount == 0;
                    }
                    return true;
                }

すべてのフィールドが検証されるように見えますが、すべてのルールが呼び出され、単一のフィールドの引数が渡され、最初の if ステートメントによってフィルター処理され、このフィールドをにしないルールは単に true を返します。

これがどれほど正しいかはわかりませんが、現在は正常に機能しており、これが私が考えることができる唯一の論理的な説明です.

于 2014-12-30T06:15:48.977 に答える