2

ノックアウトとおそらくノックアウト検証を使用するという私のかみそりの見解では、次の行を追加します(実際に ko 検証の使用を開始するため)。

<script src="@Url.Content("~/Scripts/knockout.validation.debug.js")" type="text/javascript"></script>
  • このビューを Chrome で実行すると、検証は完全に機能します。
  • このビューを IE (9.0) で実行すると、次のような非常に醜いメッセージが表示されます。

エラーメッセージ

0x800a138f - Microsoft JScript ランタイム エラー: プロパティ 'rules' の値を取得できません: オブジェクトが null または未定義です。

(SOでの今後の検索のテキストで)「続行」を押した後、うまく機能し、検証はうまく機能しているようです。このメッセージだけです。

ソリューションを検索したことに言及する価値があります-「ルール」はどこにも使用していません。IEで何が起こっているのかわかりません。

なぜそれが起こるのか、そしてどのようにエラーを解消するのかについて、誰かが何か考えを持っていますか?

4

1 に答える 1

3

短い答え: Knockout Validation の新しいバージョンではこれが修正されているようです。ノックアウト検証を更新してこの問題を解決し、これまでに起こったことを忘れてください。

より長い答え: エラーは、 と呼ばれる内部ユーティリティ メソッドのバグから発生します isValidatable。これは、ソースからコピーして貼り付けたものです。

isValidatable: function (o) {
    return o.rules && o.isValid && o.isModified;
}

エラーが示すように、誰かがisValidatablewhere ois "null or undefined" を呼び出します。オブジェクトでさえない場合、オブジェクトは検証可能ではありません! を探しているため、この場合はエラーが発生します。未定義または null でo.rulesあるため、エラーがスローされます。o

Knockout Validation の新しいバージョンでは、次のことが行われます。

isValidatable: function (o) {
    return o && o.rules && o.isValid && o.isModified;
},

oオブジェクトが存在する場合、その最初の句は true を返します (技術的には、true と評価される を返します)。オブジェクトが存在しないo場合、未定義の場合はエラーなしで返されます。

興味がある方は、発生しているバグを修正したコミットをご覧ください

于 2013-03-12T01:29:03.313 に答える