2016-07-12 14 views
9

में निर्यात को रिबाइंड करना मैं मॉड्यूल सिस्टम का उपयोग कर मानचित्र बना रहा हूं। मैं D3.js v3 पर कम या ज्यादा उपयोग किया जाता हूं लेकिन मुझे अभी भी v4 में उपयोग किया जा रहा है।d3.js v4

मैं एक प्रेषण जोड़ने की कोशिश कर रहा हूं लेकिन मुझे नहीं पता कि वी 4 में निर्यात को कैसे पुनर्जीवित करना है, क्योंकि यह फ़ंक्शन अब उपलब्ध नहीं है।

मेरी प्रेषण (_dis) और मेरी विशेष घटना ("changetype") के लिए

तो, d3 v3 में rebind निर्यात लौटने, उदाहरण के लिए इससे पहले कि सही होगा:

d3.mapDots = function (districts){ 

    var _dis = d3.dispatch('changetype'); 

    (...) 

    exports.color = function(_c){ 
     if(!arguments.length) return color; 
     color = _c; 
     return this; 
    };  

    d3.rebind(exports,_dis,"on"); 
    return exports 
    }; 

किसी को कैसे करना है पता है यह v4 में? मैं प्रेषण की कोशिश कर रहा हूं। ठीक है लेकिन यह काम नहीं करता है।

धन्यवाद!

उत्तर

10

अच्छा सवाल। ऐसा लगता है कि प्रेषण ऑब्जेक्ट में कुछ हद तक changed है, और d3.rebind अब मौजूद नहीं है। चूंकि उत्तरार्द्ध चला गया है, ऐसा लगता है कि "प्रतिलिपि" (d3.rebind के माध्यम से) .on() विधि का कोई तरीका नहीं है। इसके बजाय आपको अपना खुद का कार्यान्वयन करना होगा। See here कैसे बोस्टॉक d3-brush लागू किया गया।

मैंने डी 3 वी 4 के साथ प्राप्त करने के तरीके को प्रदर्शित करने के लिए this jsFiddle को एक साथ रखा है।

महत्वपूर्ण बिट .on विधि लागू कर रहा है:

instance.on = function() { 
    var value = dispatcher.on.apply(dispatcher, arguments); 
    return value === dispatcher ? instance : value; 
} 

और, भेजने की तरह विवरण के लिए इस

dispatcher.call("was_clicked", this, "Hello, Foo!"); 
+0

धन्यवाद है! अब मैं समझता हूं कि यह कैसे बेहतर काम करता है ... हालांकि मेरा प्रेषण अभी भी सक्रिय नहीं है। मेरे पास दो अलग-अलग फाइलें हैं (मुख्य फ़ाइल script.js, और दूसरा एक नक्शा बनाने के लिए जहां 'export.on = function()' है), क्या आपको लगता है कि यह इसके कारण हो सकता है? धन्यवाद! – Irene

+0

@Irene यदि मैं आपको प्रश्न समझ गया ... इससे कोई फर्क नहीं पड़ता कि वे अलग-अलग फाइलों में हैं। क्या मायने रखता है कि 'export.on = function() {...}' तत्काल फ़ंक्शन के भीतर रहता है (आपके मामले में जो 'd3.mapDots = function (जिलों) {...}') के भीतर होगा। यदि ऐसा है, तो अलग फाइलों में होने पर उन्हें कोई समस्या नहीं होनी चाहिए, जब तक कि मुख्य स्क्रिप्ट ठीक से 'मैपडॉट्स स्क्रिप्ट' आयात न करे (यदि आप 'd3.mapDots()' को बिना किसी त्रुटि के कॉल करने में सक्षम हैं यह ठीक से आयात किया जाता है)। – meetamit

+0

आपको एक जेएसफ़िल्ड बनाने में सक्षम होना चाहिए जो आपकी समस्या को पुन: उत्पन्न करता है, और इससे इसे हल करने में मदद मिलेगी। – meetamit