21

ビューモデルを検証するために、MVC、Knockout、およびKnockoutValidationを使用しています。

ロードするとすぐにビューモデルプロパティの検証が実行されるという問題が発生しています。つまり、ユーザーが値を変更しようとする前に、入力の横に「このフィールドは必須です」と表示されます。

この問題は、ドロップダウン(選択)コントロールで特に発生しています。

これは、JavaScriptコードの別の部分でオブザーバブルを意図せずに変更/アクセス/変更することによって作成した問題だと思います。しかし、これを追跡する方法がわかりません。

ノックアウト検証で検証を引き起こす火災が発生した場合でも、何らかの方法でサブスクライブまたは追跡できる方法はありますか?なぜこれがそのように発火しているのかを知る必要があります。isValid()関数の値が一貫してfalseであると私はかなり確信しています。

これは、ページの読み込み時にHTMLがどのように設定されているかのサンプルです。

<select class="highlightable validationElement" name="obsstate" data-bind="value: standardAnswers.ans106_1.value" required="true">
    <option value="">-- Select -- </option>
        <option value="AK">AK</option>
        <option value="AL">AL</option>
        etc...

</select>

ローカルマシンに表示されるとおり

4

3 に答える 3

21

ビューモデルのバインディングを適用した後。次に、そのビューモデルに対して次のように作成showAllMessagesしますfalse

YourViewmodelname.errors.showAllMessages(false);
于 2013-11-06T09:42:42.660 に答える
11

KOページの引用....(http://knockoutjs.com/documentation/options-binding.html

KOは、アイテムのリストの前に、「アイテムを選択してください…」というテキストを表示し、値が未定義のプレフィックスを付けます。したがって、myChosenValueが未定義の値を保持している場合(オブザーバブルはデフォルトで保持します)、ダミーオプションが選択されます。optionsCaptionパラメーターがオブザーバブルの場合、オブザーバブルの値が変更されると、最初のアイテムのテキストが更新されます。

そこで、プロパティを定義するときに「undefined」を設定することで解決しました。以下の例を参照してください。

self.myProperty = ko.observable(undefined).extend({
    required :  {"Field Required"}
});

お役に立てれば...

于 2013-05-22T12:39:04.513 に答える
9

私は自分でこの問題を理解しました。

問題は、レイザーエンジンが選択オプションをテンプレート化し、後で選択された要素の値をノックアウトにバインドする間に存在します。

選択ボックスにユーザー入力値がないという事実にもかかわらず、デフォルト値である「--select--」には実際には値が含まれています。私の場合、それは空の文字列でした。したがって、ノックアウトバインディングを適用すると、viewmodelプロパティが空の文字列値で「更新」されたため、検証が実行されました。

私の場合、これを回避するために、モデルのデフォルト値を空の文字列に設定しました。したがって、バインディングが適用されると、監視可能なKnockoutで発生するvalueHasMutatedイベントがないため、検証が行われません。

于 2012-12-04T00:42:41.387 に答える