2012-06-13 20 views
15

En backbone.js, la función de renderización de una vista genera html no asociado que luego puede adjuntarse al dom.Representación en Backbone.js usando d3.js y svgs

Actualmente, tengo que tener un objetivo existente en el HTML para poder agregar un svg a. Luego uso el patrón de datos/ingresar para insertar elementos en el svg. ¿Hay alguna manera de hacer que d3.js genere el svg sin conectarlo al dom?

var svg = d3.select("#target").append('svg') 
    .attr("viewBox","0 0 100 100"); 

svg.selectAll("circle") 
    .data(data) 
    .enter().append("circle") 
     .attr("r", 10) 
     .style("fill", "black"); 

Alternativamente, ¿es posible proporcionarle a d3 un elemento dom sin uniones para agregar cosas? ¿Algo como esto? D3.js documentación sugiere que seleccione puede aceptar nodos, pero el siguiente no funciona para mí tampoco

var svg = d3.select(this.$el).append('svg') // Uncaught TypeError: Object [object Object] has no method 'appendChild' 
    .attr("viewBox","0 0 100 100");  

svg.selectAll("circle") 
    .data([1,2,3]) 
    .enter().append("circle") 
     .attr("r", 10) 
     .style("fill", "black"); 
+2

¿Has probado 'd3.selectAll ([this.el])'? D3 podría no estar contento con un objeto jQuery, podría querer una matriz real. –

+0

Lo he intentado (no funciona). Por cierto, la documentación d3 a la que me refería sugiere que d3 sí funciona bien con los objetos Jquery. https://github.com/mbostock/d3/wiki/Selections#wiki-d3_select -> "Estos métodos también pueden aceptar nodos, lo cual es útil para la integración con bibliotecas de terceros como jQuery o herramientas de desarrollador" – kumikoda

Respuesta

12

he encontrado la respuesta en este post SVG not rendering properly as a backbone view

d3.select(this.el) 

hace el truco!

+3

Sí, d3 no puede seleccionar objetos jquery. 'd3.select (this. $ el [0])' también debería funcionar. –

+0

excelente, muchas gracias. –

+0

¡Justo lo que he estado buscando! ¡¡Gracias!! – andyengle