次のコードでは、ノックアウト モデル プロパティSearchResults
を更新し、html のすべての列のサイズを再計算しています。_resizeColumns
機能が正しく動作することはわかっています。ただし、DOM が検索結果で更新される前に実行されています。_resizeColumns
すべての div の background-color を黄色に更新することで、 が呼び出されていることを確認しました。モデルの更新前に存在していた div は黄色に設定されていますが、検索結果はそうではありません。
$.ajax({
type: 'POST',
url: 'foo.com',
data: postData,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
processData: true,
success: function(data) {
model.SearchResults(data.d); // updates the DOM with the search results via knockout.js
_resizeColumns(); // does not resize the columns because they haven't been added to the DOM yet
},
error: function() { alert('error'); }
});
検索結果は DOM に追加されます。これは、呼び出しの直後です。_resizeColumns
更新 ノックアウトが非同期で実行されているとは思わない。DOM を非同期的に更新するのは Web ブラウザ自体だと思います。
更新 2_resizeColumns()
関数は、から直接呼び出されたときに機能し
ます$(document).ready()
。
更新 3 jquery セレクターを使用して幅を取得および設定する
バージョンと_resizeColumns()
、幅を取得するときに 2 次元配列に格納し、設定するときにその 2 次元配列にアクセスするバージョンの 2 つのバージョンがあります。2 次元配列バージョンはより高速に実行されます。2次元配列バージョンも、上記の元の質問で問題を引き起こします。jquery のみのバージョンにはありません。