2013-10-03 84 views
1

我創造了這個沒有太多努力:http://jsfiddle.net/langdonx/J2ykT/1/順利動畫新元素從右工作,但不是由左

如果選中動畫中,你會看到元素如何相進出從右側很順利(如果隨機數發生器給你0,請原諒錯誤)。

現在我試圖讓元素從左邊開始相位,但看起來像selection.insert沒有像我預期的那樣插入元素。你可以看到我在這裏所說的:

http://jsfiddle.net/wqPfR/

兩個10001001獲得附加到div,但是當我插入999到我的數組,我希望.enter()給我提供999,但相反,我得到1001,因爲它似乎D3只追加元素和重新索引現有的元素說話。

我的問題是,因爲我將顯示我的rect元素,我不能在創建新元素時重繪每個單元格。

我只是不能使用D3的這種技術,或者有什麼我失蹤?

回答

4

默認情況下,.data()通過索引匹配現有元素。如果你希望它們通過值或某些內部屬性進行匹配,則必須爲此提供一個函數。在你的榜樣,這將工作:

.data(data, function(d) { return d; }); 

documentation for .data()

要控制數據被加入到元素,可以指定一個關鍵功能。這取代了默認的索引行爲;對新數據數組中的每個元素調用一次該關鍵函數,並再次對該選擇中的每個現有元素調用該函數。