小编Rus*_*llg的帖子

淘汰映射性能问题

可能重复:
Knockout.js在半大数据集下非常慢

我在我的模型中有以下事件,如果我只有一些记录,但如果我得到几十条记录,那么IE可以正常工作,那么我认为我的脚本运行得太慢了.

    self.getTrades = function () {

    $.ajax({

        type: "GET",
        cache: false,
        url: "/_vti_bin/DBOrderService/DBOrderService.svc/GetTradesByDateSource?format=json&traddate=" + self.selectedDate() + "&source=" + self.selectedSource(),
        success: function (data, textStatus, jqXHR) {
            if (data.requeststatus.code === 1) {
                var statusId = SP.UI.Status.addStatus(data.requeststatus.message);
                SP.UI.Status.setStatusPriColor(statusId, 'red');
                return;
            }
           debugger;
           ko.mapping.fromJS({ trades: data.trades }, mappings, self); //too slow, events are firing as items are added
            self.selectedTrade(null);
        },
        error: ajaxError
    });
};
Run Code Online (Sandbox Code Playgroud)

我认为这是因为映射会在添加每行时触发更改通知,因此我想将"批量"新行复制到我的模型中.

我试过了

 var temptrades = ko.mapping.fromJS(data.trades, mappings);
 self.trades=temptrades();
Run Code Online (Sandbox Code Playgroud)

和

self.trades(temtrades);
Run Code Online (Sandbox Code Playgroud)

和

self.trades(temptrades();
Run Code Online (Sandbox Code Playgroud)

但他们都只是夸大我的模型.什么是将ko.mapping创建的可观察数组一次性复制到我的模型中的正确方法.ko.mapping上是否有选项可以防止触发事件直到结束?

knockout-mapping-plugin knockout.js

2
推荐指数
1
解决办法
3089
查看次数

在嵌套的observable中处理null对象

我有一个带有几个可观察数组的视图模型(预算,公司,成本中心).预算有一个CostcenterID和一个计算的observable,它根据costcenterid从costcenterlist返回该预算的costcenter.fostCenter有一个companyID和一个计算的observable,它根据commpanyId从公司列表中返回该costcenter的公司.

在我看来,我对预算有约束力,而且我有

<td>
    <select data-bind="options:$root.Costcenter,optionsCaption:'cost center', optionsText:'Title', optionsValue:'Id', value:CostCenterId "></select>                         
</td>
<td>
    <span data-bind="text:CostCenter().Company().Title"></span>
</td>
Run Code Online (Sandbox Code Playgroud)

如果预算有成本中心,它可以正常工作,但是当给定预算不存在成本中心时,我会收到绑定错误

0x800a139e - Microsoft JScript运行时错误:无法解析绑定.

消息:TypeError:Object不支持此属性或方法;

绑定值:文本:CostCenter().公司().标题

(如果没有根据costcenterID找到costcenter,则我对costCenter的计算observable返回一个空的Object {}.

什么是最好的方法来处理这个问题,而不是乱扔我的绑定与一堆if语句,检查一个对象是否为空?

knockout.js

0
推荐指数
1
解决办法
3565
查看次数