我无法理解以下的执行顺序。这是一个较大的脚本的一部分,但是$( "#select-overlay" )
开始了。
function findSelectedMap(mapID) {
$.getJSON('maps.json', function (json) {
json.forEach(function (entry) {
if (entry.maps.id == mapID) {
changeLayerTo = entry.maps.url;
maxZoom = entry.maps.zoom;
} // end if
}); // end json.forEach
}); // end $.getJSON
} // end findSelectedMap
function overlaySelector() {
$("#select-overlay").change(function () {
mapID = $("#select-overlay input[type='radio']:checked").val();
findSelectedMap(mapID); // using mapID, find the url, zoom for overlayMap selected
currentLayer = L.tileLayer(changeLayerTo).addTo(map);
// more map stuff
}); // end $( "#select-overlay" ).
} // end overlaySelector function
在页面加载Rails应用程序时调用 overlaySelector
<script>
$(document).on("turbolinks:load", function()
{
overlaySelector();
});
</script>
我认为应该在执行 changeLayerTo
之前在第5行设置currentLayer = L.tileLayer(changeLayerTo).addTo(map);
。输入findSelectedMap(mapID)
函数(我有一堆console.logs要跟踪),然后执行跳转到currentLayer = L.tileLayer(changeLayerTo).addTo(map);
行(和错误,但我在上面手动定义changeLayerTo
执行可以继续,然后json.forEach(function(entry)
行执行并迭代maps.json
中的十几个条目并找到正确的值。但当然我需要更快的值。
我错过了什么?最初findSelectedMap(mapID)
嵌入在overlaySelector
函数中,但是我把它拉出来看看它是否会有所帮助,而且它似乎更清晰。所有变量都在函数外声明。我无法想象我是以最好的方式解决问题,但我需要网址和缩放(最后还有一些与地图相关的其他数据)。
答案 0 :(得分:2)
请尝试以下操作:
currentLayer = L.tileLayer(changeLayerTo).addTo(map);
基本上,cb param是一个回调函数,它将在forEach循环结束后执行,然后这行changeLayerTo
将使用正确的def pip_calc(open, close):
if str(open).index('.') >= 3: # JPY pair
multiplier = 0.01
else:
multiplier = 0.0001
pips = round((close - open) / multiplier)
return int(pips)
pip_calc(112.65, 112.68)
# 3
pip_calc(1.6566, 1.6568)
# 2
。
更新 - 正如@Adriani6建议的那样:你应该通过回调传回变量,而不是全局地将它们分配给窗口对象,当然,如果它们不需要是全局的