Функция сортировки D3 всегда передает неопределенные аргументы

Используя D3 2.4.2, я создаю ряд таких элементов пути:

for (var i = 0; i < pathIndices.length; i++) {
  graph.append("svg:path")
   .style("stroke", colors[pathIndices[i]])
   .style("stroke-width", "2.5px")
   .style("fill", "none")
   .attr("class", PATH_CLASS)
   .attr("id", PATH_ID_PREFIX + pathIndices[i])
   .attr("d", lineFunc(data))[0];
}

Все они рисуют на экране, как и ожидалось. Позже я хочу вывести один из них на передний план, когда пользователь что-то вводит, поэтому у меня есть обработчик событий, который делает это:

var pathToHighlight = selectPath(pathIndex);
var paths = d3.selectAll("." + PATH_CLASS);
paths.sort(
  function(a, b) {
    if (a === pathToHighlight) {
      return -1;
    }
    else if (b === pathToHighlight) {
      return 1;
    }
    else {
      return 0;
    }
  }
);

Установка точек останова в Chrome указывает, что мой выбор пути здесь успешен(pathsпредставляет собой массив элементов SVGPathElements ). Но код ничего не делает, и установка точек останова внутри функции сортировки показывает, что aи bвсегда не определены. Переходя к коду d3, я вижу, что когда внутренняя функция d3_selection_sortComparatorвызывает мой компаратор с соответствующими аргументами, за исключением того, что они объединяются по И со своими собственными неопределенными членами __data__, что приводит к тому, что undefinedпередается в :

// a and b are correct, but a.__data__ and b.__data__ are undefined
return comparator(a && a.__data__, b && b.__data__);

. ] Что я здесь делаю неправильно? Мои пути правильно отображаются на экране, поэтому кажется, что они должны иметь правильные данные. Верно?

Редактировать :Изображения:

Contents of path

parameters a and b are undefined

7
задан ACK_stoverflow 2 August 2012 в 18:11
поделиться