knockout.js - 映射大型 knockout 对象时 UI 锁定

标签 knockout.js knockout-mapping-plugin

我已经完成了一些工作,但我认为我的问题在于 knockout 映射。

我正在发送一个大型电子表格(4000 行)在服务器端验证它,将 4000 个对象发送回对 knockout 映射的调用。

当它命中映射时 - 页面上的所有 gif(ajax 加载程序)都会停止几秒钟(直到映射完成)。当它最终返回时,所有返回的对象都会显示出来,整个过程按预期进行。

暂停看起来像是崩溃 - 在生产中很可能有更大的电子表格在运行,所以我真的想让事情看起来响应迅速。

有谁知道如何让这些 gif 继续旋转?谢谢

    public csvToWebAPIObject(file, onFinished, onError) {

        var formData = new FormData();
        formData.append("upload", file);

        var url = this.getFullURL();
        $.ajax({
            url: url,
            data: formData,
            processData: false,
            contentType: false,
            type: 'POST',
            success: (data) => {
                var mapped = ko.mapping.fromJS(data);
                onFinished(mapped);
            },
            error: function (err, ajaxOptions, thrownError) {
                if (onError != null) {
                    onError(err.responseText);
                }
            }
        });
    }

最佳答案

Knockout 从未将如此多的数据处理到 DOM 中。延迟来自于实际将数据渲染到页面上。不幸的是,最快的方法是在服务器端执行此操作,处理数据并返回完成的页面。

如果您必须使用 knockout ,您可以研究一下寻呼系统吗?我建议一次只渲染 100 行左右。您可以像下面这样做

JavaScript

this.items = ko.observableArray(dataFromTheServer);
this.currentPage = ko.observable(0);  
this.pageSize = ko.observable(100);
this.visibleItems = ko.computed(function(){
   return self.items.splice(self.currentPage() * self.pageSize(), self.pageSize()*self.currentPage() + self.pageSize());  //Returns 0 - 100, or 101 -> 200, etc     
});

html

<!-- do visibleItems instead of items -->
<div data-bind="foreach: visibleItems">
   //render items
</div>

关于knockout.js - 映射大型 knockout 对象时 UI 锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23370069/

相关文章:

asp.net-mvc - 从 aspnetmvc 序列化时忽略 knockout View 模型上的属性

javascript - 如何使用 Knockout 连接 Observable 数组中的所有项目?

javascript - Knockout.js -> 更改 foreach 中的后代绑定(bind)

knockout.js - 如何使用knockout mapping插件?

javascript - 带有 RequireJS 的 Knockout 映射插件 : Uncaught Error: Mismatched anonymous define() module

knockout.js - knockout 映射性能问题

json - 使用 knockout.mapping 时,knockoutjs 抛出 "Unknown template value"

javascript - 在 Knockout JS 中保存对 DOM 元素的引用的正确模式

javascript - 禁用表中的按钮

javascript - Knockout js 中嵌套模板中的动态数据绑定(bind)