下面的示例运行正常,但是,我正在尝试使函数handleArcs()
更具通用性(即handleLayer()
)。
我的layerVar
有一个属性onEachFeature
,它将方法onEachArc
应用于图层的每个要素。我希望handleArcs()
将函数onEachArc()
作为参数,但它不起作用,当我通过它并查看typeof
时,结果为undefined
。基本上它是一个简单的函数作为另一个函数的参数传递,但它在这种情况下不起作用。
我的第一个假设是上下文this
出了问题。但是因为typeof thisShouldBeAFunction
返回undefined
,我现在不确定问题是什么。
任何猜测可能导致问题的原因是什么?
function onEachArc(feature, layer) {
if (feature.properties) {
layer.bindPopup("<b>" + feature.properties.linkstr + "</b> has speed " + feature.properties.speed + ".");
}
};
function handleArcs(data, layerVar, layerName, thisShouldBeAFunction) {
alert(typeof thisShouldBeAFunction);
//Add the feature to the map
layerVar = new L.geoJson(data, {
onEachFeature: onEachArc
}).addTo(map);
}
getData('Layers/arcs.json').done(handleArcs(arcs, "Arcs", onEachArc));
getData()
调用jQuery AJAX方法从服务器获取数据:
function getData(url) {
return $.ajax({
url : url,
type: 'GET',
error : function (xhr,status,error){alert("An error happened while loading a file: "+error+".")}
});
}
答案 0 :(得分:2)
正如@Tushar所说,不要立即调用handleArcs
,将其包含在具有适当签名的匿名函数中,并将其传递给done
。
getData('Layers/arcs.json').done(function(data) {
handleArcs(data, arcs, "Arcs", onEachArc);
});
我不太明白
的意思layerVar = new L.geoJson(...
在handleArcs
内。您不希望此作业影响您传入的arcs
变量,是吗?
关于全局变量作为参数:
var aGlobal = "Test_One";
function TryToChangeIt(aParam) {
aParam = "Test_Two";
}
function MyFunction(aParam) {
alert("Before: " + aGlobal);
TryToChangeIt(aGlobal);
alert("After: " + aGlobal);
}
通过调用TryToChangeIt(aGlobal);
,我们传递全局变量的值 - not name 。 javascript引擎创建一个新的临时变量作为参数,并在调用aGlobal
之前为其分配TryToChangeIt
的值。在TryToChangeIt
内,我们可以更改此临时变量的值,但这不会影响aGlobal
的值。