मैं अपने जावाScripts को बंडल करने के लिए गुलप और ब्राउजरिफ़ का उपयोग कर रहा हूं। मुझे एक कॉलबैक फ़ंक्शन का खुलासा करने की आवश्यकता है जिसे Google मानचित्र API लोड के बाद निष्पादित किया जाना चाहिए।ब्राउज़रify का उपयोग करते समय Google मानचित्र के लिए कॉलबैक फ़ंक्शन का खुलासा कैसे करें?
यह window.initMap
जैसे कुछ उपयोग किए बिना कैसे किया जा सकता है? इसके साथ समस्या यह है कि मुझे initMap के अंदर बड़ी संख्या में अन्य विधियों को आग लगाना होगा, इसलिए window.functionName
और वैश्विक नेमस्पेस को प्रदूषित करने के अलावा इसे करने का बेहतर तरीका होना चाहिए।
दूसरी तरफ, क्या यह callback
पैरामीटर को बाहर करने के लिए ठीक है और इसके बजाय ऐसा कुछ करने के लिए ठीक है?
$.getScript('https://maps.googleapis.com/maps/api/js').done(function() {
initMap();
});
किसी भी मदद की सराहना की जाएगी। मैंने और अधिक समय बिताया है कि मैं इसे काम करने में कभी स्वीकार करूंगा।
gulpfile.js:
gulp.task('browserify', ['eslint'], function() {
return browserify('/src/js/main.js')
.bundle()
.pipe(source('main.js'))
.pipe(buffer())
.pipe(gulp.dest('/dist/js'))
.pipe(reload({ stream: true }));
});
main.js:
require('jquery');
require('./map');
map.js:
var map = (function() {
'use strict';
var mapElement = $('#map');
function googleMapsAPI() {
$.getScript('https://maps.googleapis.com/maps/api/js?callback=initMap');
}
function initMap() {
var theMap = new google.maps.Map(mapElement);
// functions...
}
function init() {
googleMapsAPI();
}
});
map.init();
समस्या यह है कि 'initMap()' निकाल दिए जाने के बाद मुझे अन्य कस्टम फ़ंक्शंस को कॉल करने की आवश्यकता है। अगर मैं उन्हें 'map.functionName()' के साथ बुलाता हूं, तो मुझे एक फ़ंक्शन परिभाषित त्रुटि नहीं मिलती है। इसके आसपास एकमात्र तरीका 'window.functionName()' का उपयोग करना है, लेकिन यह वैश्विक नामस्थान को प्रदूषित करता है। – Cofey
@ कोफी - आपके पास वैश्विक नामस्थान को प्रदूषित करने के अलावा कोई विकल्प नहीं है * क्योंकि Google नक्शे 'कॉलबैक' का उपयोग करने का एकमात्र तरीका है। बहुत से लोग सोचते हैं कि 'कभी भी वैश्विक दायरे में कुछ भी नहीं डालें क्योंकि ऐसा करना बुरा है' लेकिन यह गलत है। आपको क्या सोचना चाहिए कि 'वैश्विक दायरे में कुछ भी न डालें जो आपको बिल्कुल वहां होने की आवश्यकता नहीं है'।वैश्विक ** नाम में होने के लिए आपको ** कॉलबैक = initMap' (जो 'initMap' है) द्वारा परिभाषित फ़ंक्शन की आवश्यकता है। इसे पसीना मत करो। – Adam
आगे, जब मैं क्लाइंट साइड विकसित कर रहा हूं, तो मैं आम तौर पर अपना नाम नाम परिभाषित करता हूं कि मैं * सामान लटक सकता हूं। मेरे पास अक्सर 'window.myNameSpace = window.myNameSpace || है {} 'मेरी प्रोजेक्ट में और फिर 'window.myNameSpace'' की तरह 'window.myNameSpace.constants = {CONSTANT_ONE = 123456}' – Adam