2

選択用のプロパティを持つviewModelがあります。プロパティは 内に配置されますko.validatedObservable({})。異なるセクションで異なるビューを分離していko.validatedObservable()ます。私の入力は、選択がページの読み込みから検証されていることを除いて、正常に検証されていますinit()(messagesOnModified: trueページを最初に読み込むときにエラーメッセージを表示したくないため)。最初のオプションにはvalue="". 私はマークアップをチェックし、他の入力コントロールがこの属性を本来あるべきようにdata-orig-title="REQUIRED"設定している間に設定されています""

選択の動作が異なる理由を誰かが指摘できますか? Select を razor で生成していることも付け加えておき@Html.DropDownListFor(x=>x.dest_provincia, Model.Items, new { data_bind="dest_provincia"}) ます。 これは検証のサンプルです。

(ビューモデル上)

self.dest_provincia = ko.observable().extend({ required: { message: "REQUIRED"} });

これは内部に配置されます:

self.userValidation = ko.validatedObservable({
        rem_provincia: this.rem_provincia
)};

変更イベントがトリガーされているため、選択時に検証が行われていることに気付きましたが、何が原因なのかわかりません..? 更新: ajax 呼び出しで $.each をループし、knoackout で observableArray を埋めることにより、カミソリで選択を作成しようとしました。いずれにせよ、変更イベントはページの読み込み時にトリガーされます...!?

4

1 に答える 1

2

私は今日これを解決することができました。

剃刀エンジンが選択オプションをテンプレート化し、後で選択した要素の値を Knockout にバインドする間に問題が発生します。

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

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

于 2012-12-04T00:45:59.530 に答える