मैं sv3 में दुनिया का नक्शा प्रस्तुत करने के लिए d3.js का उपयोग कर रहा हूं (सुविधाओं के लिए https://github.com/johan/world.geo.json/blob/master/countries.geo.json का उपयोग कर)। मैं बैकबोन व्यू में प्रतिपादन तर्क को समाहित कर रहा हूं। जब मैं दृश्य प्रस्तुत करता हूं और इसे डीओएम से जोड़ता हूं, तो मेरे ब्राउज़र में कुछ भी प्रदर्शित नहीं होता है, हालांकि जेनरेट किए गए HTML को देखते समय एसवीजी मार्कअप सही ढंग से उत्पन्न होता है। यह बैकबोन के भीतर encapsulating जब ठीक है प्रस्तुत करता है। देखें। यहाँ मेरी कोड Backbone.view का उपयोग कर रहा है:एसवीजी रीढ़ की हड्डी के दृश्य के रूप में ठीक से प्रस्तुत नहीं कर रहा है
/**
* SVG Map view
*/
var MapView = Backbone.View.extend({
tagName: 'svg',
translationOffset: [480, 500],
zoomLevel: 1000,
/**
* Sets up the map projector and svg path generator
*/
initialize: function() {
this.projector = d3.geo.mercator();
this.path = d3.geo.path().projection(this.projector);
this.projector.translate(this.translationOffset);
this.projector.scale(this.zoomLevel);
},
/**
* Renders the map using the supplied features collection
*/
render: function() {
d3.select(this.el)
.selectAll('path')
.data(this.options.featureCollection.features)
.enter().append('path')
.attr('d', this.path);
},
/**
* Updates the zoom level
*/
zoom: function(level) {
this.projector.scale(this.zoomLevel = level);
},
/**
* Updates the translation offset
*/
pan: function(x, y) {
this.projector.translate([
this.translationOffset[0] += x,
this.translationOffset[1] += y
]);
},
/**
* Refreshes the map
*/
refresh: function() {
d3.select(this.el)
.selectAll('path')
.attr('d', this.path);
}
});
var map = new MapView({featureCollection: countryFeatureCollection});
map.$el.appendTo('body');
map.render();
यहाँ कोड है कि काम करता है, Backbone.View
var projector = d3.geo.mercator(),
path = d3.geo.path().projection(projector),
countries = d3.select('body').append('svg'),
zoomLevel = 1000;
coords = [480, 500];
projector.translate(coords);
projector.scale(zoomLevel);
countries.selectAll('path')
.data(countryFeatureCollection.features)
.enter().append('path')
.attr('d', path);
का उपयोग कर मैं भी उत्पन्न एसवीजी मार्कअप का एक स्क्रीनशॉट संलग्न किया है बिना। कोई विचार क्या गलत हो सकता है?
/**
* Custom make method needed as backbone does not support creation of
* namespaced HTML elements.
*/
make: function(tagName, attributes, content) {
var el = document.createElementNS('http://www.w3.org/2000/svg', tagName);
if (attributes) $(el).attr(attributes);
if (content) $(el).html(content);
return el;
}
धन्यवाद से! मैंने अपने दृश्य में 'मेक' ओवरराइड किया और createElementNS को 'http://www.w3.org/2000/svg' के साथ createElement के बजाय इस्तेमाल किया और ऐसा लगता है कि यह चाल है। मार्गदर्शन की सराहना करें। –
@rr: क्या आप अपनी मेक विधि कहीं कहीं पोस्ट कर सकते हैं? –
@PierreSpring: हो गया, यह सुनिश्चित नहीं है कि यह बैकबोन के नए संस्करणों के साथ कितना प्रासंगिक है, मैं नहीं रख रहा हूं। –