2012-04-12 12 views
8

Pregunta rápida sobre la unión de datos. Digamos que tengo algunos elementos que cada uno contiene a. Cuando inicialmente unir los datos a, se hereda automáticamente por los elementos que añado a la selección de entrar.Herencia en datos se une a

Cuando se modifican los datos y vuelvo a vincularlos, esperaba que los elementos recogieran los nuevos datos, pero esto no sucedió.

para manejar esto que necesitaba para volver a vincular explícitamente los datos en el nivel inferior de esta manera:

gElements.selectAll("circle") 
    .data(function(d) { return [d]; } 
    .enter().append("circle"); 

Este maneja tanto en el caso de la creación y la posterior revinculación. Pero parece algo redundante ya que devolver [d] es esencialmente lo que sucede automáticamente con la herencia inicial de los datos del elemento padre.

¿Este enfoque es la forma correcta de manejar esto, o me estoy confundiendo en algún lugar aquí?

Respuesta

17

Cuando vincula datos a elementos a través de selection.data, actualiza los datos vinculados a esos elementos. Sin embargo, hace no propaga automáticamente los datos nuevos a elementos descendientes; debes hacer esto tú mismo.

Cuando llama al selection.select, que es la contrapartida de selection.append, los datos de la matriz están vinculados al elemento secundario seleccionado para cada elemento seleccionado. Cuando llama al selection.selectAll, los datos no están vinculados, por lo que debe llamar posteriormente a selection.data para vincular los datos nuevos a los niños.

Es difícil responder a su pregunta sin ver más contexto. Si ha actualizado los datos sobre gElements, y cada elemento de G contiene un círculo, se puede propagar los datos de la matriz G de círculo niño usando selection.select:

gElements.select("circle"); 

El fragmento de código que escribiste se utilizaría sólo si desea crear un nuevo círculo, si falta el círculo. Esto se describe en Thinking with Joins. El código exacto que escribiría podría depender de si se va a ejecutar en la entrada y la actualización, o simplemente en la actualización.

+0

Sí, tienes razón, tengo solo 1 círculo por . No me di cuenta de que seleccionaba la herencia de datos provocados, pero veo en la documentación que realmente dice eso. Encuentro esto un poco contra-intuitivo ya que siempre he pensado en el acto de seleccionar como una operación de solo lectura, pero este caso causa que el nodo se modifique. –

Cuestiones relacionadas