Knockout.js 加载时击倒JS渲染

Knockout.js 加载时击倒JS渲染,knockout.js,loading,render,Knockout.js,Loading,Render,如果您有列表和计数标签。如何在将每个项目推入viewmodel数组时实时渲染每一行并使用新计数增加标签 对我来说,显示的列表仍然是空的,计数为0,整个UI在viewmodel数组填充时被阻止,然后当每个项目都被推入数组时,列表中的所有行都会突然显示在计数标签中的最终数字。UI被阻止是非常合乎逻辑的,因为JavaScript是单线程的。因此,使用foreach将阻止脚本的其余执行 对此的快速修复方法是使用setTimeout延迟代码块的执行。例如,如果您使用: for (var i=0;i<

如果您有列表和计数标签。如何在将每个项目推入viewmodel数组时实时渲染每一行并使用新计数增加标签


对我来说,显示的列表仍然是空的,计数为0,整个UI在viewmodel数组填充时被阻止,然后当每个项目都被推入数组时,列表中的所有行都会突然显示在计数标签中的最终数字。

UI被阻止是非常合乎逻辑的,因为JavaScript是单线程的。因此,使用foreach将阻止脚本的其余执行

对此的快速修复方法是使用setTimeout延迟代码块的执行。例如,如果您使用:

for (var i=0;i< totalGifts;i++) {
    setTimeout(function(){
        self.gifts.push({name: "New Gift " + i, price: "New Price: " + i});
    },1);            
}
for(var i=0;i

每次更新都会被延迟1ms并异步触发,因此不会阻塞您的UI。我已经更新了你的小提琴。

想给我们看看你的代码吗?有一种方法可以做到这一点,但这将取决于你如何填充你的数组。你能展示你迄今为止没有工作的代码吗?很难将我的代码抽象出来。。。希望我的描述有意义。。。我将一个淘汰样本复制到一个提琴中,调整它以加载一些数据。如果单击“添加礼物”按钮,您可以看到UI被阻止,并一次呈现所有内容。