2012-06-13 9 views
15

In backbone.js, una funzione di rendering di una vista genera un html non collegato che può essere successivamente collegato al dom.Rendering in Backbone.js utilizzando d3.js e svgs

Attualmente, devo avere un target esistente nell'HTML per poter aggiungere un file svg a. Quindi utilizzo i dati/inserisci pattern per inserire elementi nel file svg. C'è un modo per ottenere d3.js per generare lo svg senza collegarlo 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"); 

In alternativa, è possibile fornire a d3 un elemento dom non collegato per aggiungere elementi a? Qualcosa come questo? D3.js documentazione suggerisce che select può accettare i nodi, ma il seguente non funziona neanche per me

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

Hai provato 'd3.selectAll ([this.el])'? D3 potrebbe non essere soddisfatto di un oggetto jQuery, potrebbe volere un vero array. –

+0

Ho provato (non funziona). A proposito, la documentazione di d3 a cui mi riferivo suggerisce che d3 funziona bene con gli oggetti Jquery. https://github.com/mbostock/d3/wiki/Selections#wiki-d3_select -> "Questi metodi possono anche accettare nodi, che è utile per l'integrazione con librerie di terze parti come jQuery o strumenti di sviluppo" – kumikoda

risposta

12

ho trovato la risposta in questo post SVG not rendering properly as a backbone view

d3.select(this.el) 

fa il trucco!

+3

Sì, d3 non può selezionare oggetti jquery. anche 'd3.select (this. $ el [0])' dovrebbe funzionare. –

+0

eccellente, grazie mille. –

+0

Proprio quello che stavo cercando! Grazie!! – andyengle