在下面的代码中,我正在更新我的淘汰模型属性SearchResults
,然后我正在重新计算我的 html 中所有列的大小。我知道该_resizeColumns
功能正常工作。然而,它是在 DOM 使用搜索结果更新之前运行的。_resizeColumns
我已经通过用黄色更新所有 div 上的背景颜色来验证它正在被调用。模型更新之前存在的 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。
更新 2
该_resizeColumns()
函数在直接从$(document).ready()
.
更新 3
我有两个版本,_resizeColumns()
一个使用 jquery 选择器来获取和设置宽度,另一个在获取宽度时存储到二维数组中,并在设置它们时访问该二维数组。二维数组版本的执行速度更快。二维数组版本也导致了我上面原始问题中的问题。仅 jquery 版本没有。