所有数据都在enter()占位符(D3)中

时间:2014-03-10 17:46:06

标签: javascript d3.js

我有一个使用此代码的更新函数:

// actualy fetched from server. array of JS objects that I parsed to right type
var xData = [{
    id: 234234 // parsed as integer
    date: 15/11/2001 // parsed as date
    price: 6512 // parsed as integer
}];

// triggred by the user
function updateSVG() {

 // fetch new data from ther server
 xData = [];
 xData = [{
    id: 234234 // parsed as integer
    data: 15/11/2001 // parsed as date
    price: 6512 // parsed as integer
}];

 // join data
 var x = svg.selectAll(".x-class")
     .data(xData, function(d) { return d.id; });

 // new data
 x.enter().append("image")
     .attr('class', 'x-class')
     .attr("xlink:href", "x-image.png")
     .attr("width", 16)
     .attr("height", 19)
     .attr('y', 0);

 // current and new data
 x.transition()
     .attr("x", function(d) { return x(d.date); })
     .attr("y", function(d) { return y(d.date); });

 /// old data
 x.exit().remove();

}

我期望的是当我第二次或第三次运行此功能时,大多数数据将是UPDATE(即不在输入中),只有少数数据将在enter()和exit()中。

但我的所有数据都在enter()中。无论。 d.id肯定是独一无二的。一切都按预期运作良好,但这个问题。当我在获取新数据之前和之后检查x对象时,我的所有数据都在enter()占位符中。

有什么想法吗?我错过了什么?

1 个答案:

答案 0 :(得分:0)

代码问题(如果有任何帮助,请告诉我们):

  1. x的情况下x(d.date)是多少?你的意思是xData吗?

    x.attr("x", function(d) { return x(d.date); })

  2. 这是做什么的?您尚未定义datay。 (或arrayObjectIndexOfyOffset,但我怀疑这些是暗示的)

    return y(data[arrayObjectIndexOf(data, d.date, 'date')].price) - yOffset;

  3. 此外,由于D3是一个数据操作库,当我们不知道您的数据是什么样时,它通常更难以帮助。有时我们会得到一个想法(d.date),但这里可能很重要(因为你显然在其他地方找到了价格而不是d.price