我加載記錄到crossfilter對象做循環Ajax調用:數據多源導致`無效陣列寬度`錯誤
for (i=0;i<rangeToLoad.length;i++) {
url = "http://myserver/"+rangeToLoad[i]+"/myrecords.js"
$.ajax({
url: url,
dataType:"json",
success: function (jsondata) {
var records = jsondata.records;
var parseDate = d3.time.format("%Y-%m-%d").parse;
records.forEach(function(d) {
d.date = parseDate(d.date);
});
if (typeof myCrossfilter === "undefined") { //first call
myCrossfilter = crossfilter(records);
} else {
myCrossfilter.add(records);
}
initData();
showData();
}
});
}
我initData()
功能基本上在我的crossfilter的尺寸和組對象被定義。
dims.date = myCrossfilter.dimension(function(d) {return(+d.date);});
groups.date={};
dims.date2 = myCrossfilter.dimension(function(d) {return(+d.date);});
groups.date2={};
dims.instrumenttype = myCrossfilter.dimension(function(d) {return(d.product);});
groups.instrumenttype = {};
groups.date.pnlSum = dims.date.group().reduceSum(function(d) {return(d.pnl);});
groups.date2.cumPnlSum = dims.date2.group().reduceSum(function(d) {return(d.cumpnl);});
groups.instrumenttype.pnlSum = dims.instrumenttype.group().reduceSum(function(d) {return(d.pnl);});
我的猜測是,不是每次更新每個ajax調用的現有維度,每次都會創建一個新的維度。
我該如何防止這種情況發生?
謝謝回答,但其實我已經通過在第一遍中確定的尺寸,然後只將記錄添加到crossfilter解決我的問題。我會發佈一個答案。 – Chapo
此外,您的評論是錯誤的,我相信。 「crossfilter」的整個目的也是具有獨立於底層記錄集的維度。一旦你定義了他們,這是他們的全部目的,適用於你在你的交叉過濾器中扔到他們的任何記錄集。 – Chapo
我只是看了一下代碼,你說得對。有很多支持添加(甚至在一定程度上刪除)數據。我原本以爲crossfilter是一個針對過濾和分組進行優化的只讀模型,但它比這更進一步。我會更新我的答案以反映這一點。 –