2015-03-08 2 views
1

Я пытаюсь понять source code for d3 selectAll , и я не понимаю строку, следующую за моим комментарием ниже.d3 selectAll Исходный код

Я вижу, как есть замыкание на селекторной строке и что this установлен на узел при вызове d3_selectAll, но как используются остальные три аргумента в call?

import "../core/array"; 
import "selection"; 

d3_selectionPrototype.selectAll = function(selector) { 
    var subgroups = [], 
     subgroup, 
     node; 

    selector = d3_selection_selectorAll(selector); 




for (var j = -1, m = this.length; ++j < m;) { 
    for (var group = this[j], i = -1, n = group.length; ++i < n;) { 
     if (node = group[i]) { 
     //***where are node.__data__, i, j consumed?*** 
     subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))); 
     subgroup.parentNode = node; 
     } 
    } 
    } 



return d3_selection(subgroups); 
}; 

function d3_selection_selectorAll(selector) { 
    return typeof selector === "function" ? selector : function() { 
    return d3_selectAll(selector, this); 
    }; 
} 

ответ

2

Это относится только в контексте subselections и объяснено в documentation:

Селектор также может быть определена как функция, которая возвращает массив элементов (или NodeList), или пустой массив, если нет соответствующих элементов. В этом случае указанный селектор вызывается таким же образом, как и другие функции оператора, передается текущая datum d и индекс i, причем этот контекст является текущим элементом DOM.

В частности, если селектор не функция, эти аргументы просто игнорируются (объявление функции в конце без аргументов).

+0

Ahh ... Конечно. Я не мог видеть. Таким образом, эти три аргумента передаются в селекторную функцию как d, i, j спасибо за объяснение @LarsKotthoff –

Смежные вопросы