我有一個工廠用於創建dc.js圖表,它使用交叉過濾函數綁定到$ scope。 Plnkr Examplecrossfilter.js與dc.js更新回調組更改圖表
$scope.updateMyPie = function(data) {
var cf = crossfilter(data)
$scope.mypie.dimension = cf.dimension(function(d) { return d.key })
$scope.mypie.group =
$scope.mypie.dimension.group().reduceSum(function(d){ return d.value });
}
圖表工廠經由角指令通過DOM通吃圖表屬性,以便標籤是像這樣
<mypie id="mypie" chart-dimesion="mypie.dimension" chart-group="mypie.group"...etc
這種方法工作得很好濾波,初始數據加載,綁定和圖表繪製等....但是這是一個例外。如果我有類似點擊按鈕的事件觸發新的數據請求,然後我使用上述作爲回調並處理數據的罰款,但不更新圖表。即使我包含dc.redrawAll()或renderAll()等。
我試過嵌入redraw(),redrawAll(),驗證數據是否正確回來,完全破壞標籤並重新創建和追加到DOM等等。我的假設是使用這種工廠方式創建DC/D3圖表時出現問題,但是我會假設如果我更新了範圍內的組和/或維度,它應該仍然有效?看起來好像圖表對象不會接受對dim/groups的更改?我可以驗證由$ scope.etc引用的CF組值已經通過改變兩個初始呼叫和第二個呼叫如下:
var print_filter = function(filter) {
var f = eval(filter);
if (typeof (f.top) != "undefined") {
f = f.top(Infinity);
}
if (typeof (f.dimension) != "undefined") {
f = f.dimension(function (d) {
return "";
}).top(Infinity);
}
console.log(filter + "(" + f.length + ") = " + JSON.stringify(f).replace("[", "[\n\t").replace(/}\,/g, "},\n\t").replace("]", "\n]"));
};
更新:加入plnkr,並試圖更好地解釋=所以用這個例子我有一種「傳統」的方式來構建直流圖,而不是基於服務的方法,我嘗試使用指令和元素來實現。一切工作,除了我試圖在plnkr中顯示...當我要求新的數據(ajax)第一次更新罰款,基於指令的方法似乎沒有任何工作。我嘗試了很多方法,但實質上更新$範圍dim /組應該是正確的?我認爲這是雙向約束,因此這兩個「範圍」應該共享一個參考?但即使我使用範圍。$ parent.my.dimension等,它不會影響它。
真棒!再次感謝Ethan。這是我昨天實際詢問有關散點圖的過濾問題的基礎。感謝幫助的人! – Justin
Ethan,我已經注意到在更新函數中實現這個之後,我傳入了數據,並安裝了它,並且所有內容都在那裏,然後是cf.remove,然後是cf.add,並且我只獲取響應數組的第一個對象?有任何想法嗎? – Justin
我應該提到,我從renderlet單擊圖表本身調用它...因此圖表上的選擇被保留(理想情況下),並且回調包含模擬過濾的參數。 – Justin