2

だから私はシングルページアプリでKOマッピングプラグインでKnockoutJSを使用しています...

参照サイトがクエリ文字列でいくつかの値を送信して、いくつかのテキストボックスに事前入力するオプションがあります。クエリ文字列を解析し、jQuery val() を使用して KO バインドされたテキスト ボックスの値を設定する JS 関数があります。ただし、値が設定されることはありません。

ここに私がしようとしていることに関するいくつかの疑似コードがあります...

var jobTitle = "Ninja";

$("#jobTitle").val(jobTitle); // doesn't work

$("#jobTitle").val(jobTitle).change(); // doesn't work

$("#hiddenJobTitle").val(jobTitle); // works

マークアップ

<input id="jobTitle" type="text" data-bind="value: JobTitle" />

<input id="hiddenJobTitle" type="hidden" data-bind="value: JobTitle" />

興味深いメモ: 同じコードを使用して、KO バインドされた非表示フィールドの値を設定すると、正常に動作します。

4

2 に答える 2

0

これは KnockoutJS の問題ではなく、スクリプトを読み込んで関数を呼び出す順序の問題でした。

KOがバインドされていたビューモデルがインスタンス化される前に、ドキュメントの準備ができたときにクエリ文字列を介してテキストボックスの値を設定していました。

そこで、パース/セット スクリプトから新しい関数を作成し、ビュー モデルを作成して KO にバインドした後に呼び出します。

理想的には、ノックアウトバインディングを監視して実行するイベントハンドラー/コールバックを作成したはずですが、ノックアウトがそのようなイベントコールバックをサポートしているかどうかを見つけることができませんでした。もしそうなら、私に知らせてください。

理想的には、これをやりたいので、順序は関係ありません

ko.on("bind", function(viewModel) {
 // this runs after knockout binds a view model
});
于 2013-05-09T20:26:02.973 に答える
0

これが機能しない理由は$("#jobTitle").val(jobTitle)、ノックアウト データバインドの jobTitle が実際には関数であるためです。コードのその時点を調べて、jobtitle が返す内容を確認すると、それが関数であることがわかります。使用する必要があります$("#jobTitle").val(jobTitle());

ノックアウト値のリターンを得るために。

于 2013-05-09T18:43:52.510 に答える