我是JavaScript的新手,并且在几个小时之前与它相处得很好,这让我很难过。
我的问题是回调,我不认为我做得对。基本上,在从Init
页面调用的App.Map
的{{1}}上,脚本将加载google地图脚本并执行回调中的代码。一切正常。问题是当我在html
函数中单步执行脚本时,load
应为location
但不是null
。但是,如果我使用App.Map.location
代替location
,则该变量正确且等于null
。
其次,注释掉的行ClearMarkers();
会抛出一个错误,当我单步执行脚本时无法识别它。
我没有做对,这种方式实现回调的正确方法是什么?
命名空间:
var App = App || {};
App.Map = App.Map || {};
App命名空间:
(function(ns) {
ns.LoadScript = function(url, callback) {
var script = document.createElement('script');
script.type = 'text/javascript';
if (script.readyState) {
script.onreadystatechange = function() {
if (script.readyState === 'loaded' ||
script.readyState === 'complete') {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function() {
callback();
}
}
script.src = url;
document.head.appendChild(script);
};
})(App);
映射命名空间:
(function(ns) {
ns.position = {
lat: -34.397,
lng: 150.644
};
ns.location = null;
var key = '';
var map;
var markers = [];
ns.ClearMarkers = function () {
if (markers.length !== 0) {
markers.forEach(function (marker) {
marker.setMap(null);
});
markers = [];
}
};
var load = function () {
map = new google.maps.Map(document.getElementById('map'), {
center: this.position
});
//ClearMarkers();
if (location) {
alert("perform search with this location");
} else {
alert("find current location");
}
};
ns.Init = function (data, options) {
this.location = data && data.location ? data.location : null;
App.LoadScript('https://maps.googleapis.com/maps/api/js?key=' + key + '&libraries=places', load);
};
})(App.Map);
感谢您的帮助,如果问题需要重新加工,请告诉我。