我正在使用jQuery和Knockout,试图在网页上实现分页。
显示的项存储在一个计算数组中,然后我使用jQuery一次正确地显示5个元素。我遇到的问题是,在更新计算数组之后,HTML代码更新得不够快。下面的jQuery代码不会检索所有元素,因为HTML尚未使用存储在计算数组中的值进行更新。
filteredLabels: KnockoutComputed<LabelVM[]>;
setPagination() {
$(table + ' tr:gt(0)').each(function () {
trnum++;
if (trnum > maxRows) {
$(this).hide();
}
if (trnum <= maxRows) {
$(this).show();
}
});
}
有人知道如何在使用jQuery进行任何类型的操作之前等待html代码更新吗?
我希望下面的内容能让你对我的问题有一些事后的了解:
$('mytable').onload(function() { applyPagination() });
这不起作用,因为table元素没有存储'onload‘函数。
发布于 2019-01-18 14:55:33
如果问题是这样的,那么您在html中有一堆敲击操作,这些操作基本上是根据viewmodel值加载运行时html元素。现在,一旦所有这些元素都被完全呈现,我们需要调用视图模型中的一个函数。
在这种情况下,您不能总是依赖JQuery提供的onload
,因为我们需要的完整DOM会在稍后处理html中的ko代码时呈现。
诀窍是在完成所有操作后,在html中包含一个ko代码本身。因为这也是一个ko代码,所以一旦使用ko解析完成html的呈现,我们就会得到句柄。
您可以在html下面包含以下行,然后在组件中指定的函数renderingComplete
中处理您的情况。
<span data-bind="click : $component.renderingComplete()"></span>
希望这能有所帮助
https://stackoverflow.com/questions/54235566
复制相似问题