我有一个非常复杂的应用程序,其中一个 viewModel 有一个记录列表:
app.records = ko.observableArray([])
使用 AJAX,我从服务器获取一些 JSON 并将其填充到数组中:
$.getJSON("/api/records", function(data){
app.records($.map(data, function(item){
r = new Record(item);
return r;
});
});
至少,这对我的测试数据集中的 6 个项目非常有效。该应用程序几乎可以立即加载。但我也有一个创建新记录按钮,它可以做到这一点:
$.post("/api/records", {}, function(record){
r = new Record(record);
console.log("About to push...");
app.records.push(r);
console.log("Pushed the new record.");
});
第一个日志行会立即出现,但第二行大约需要 8 秒才能出现。注释掉推送使操作有效地即时。我相信问题是由我拥有的相当多的相当复杂的计算变量引起的;我认为推动导致它重新计算EVERYTHING。然而,奇怪的是在页面加载时添加六个测试项目是即时的。
谁能给我一些调试的提示?该应用程序未处于我可以轻松共享代码或构建隔离问题的 JSFiddle 的状态。我不愿意只是盲目地注释掉行以查看是否有任何解决问题的方法,因为这可能需要很长时间。有没有人有任何想法?或者至少是一个总体策略?:)
(我目前正在使用 2.1 候选版本;Knockout 2.0 也会出现问题。)