我有一个函数,我调用它来检索滑动窗格(telerik splitter控件) 我以为我可以使用这个功能
function getZone() {
var slidingZone = $find("<%= slidingZone.ClientID %>");
return function () { return slidingZone; };
}
这样它就不必每次都“找到”滑动区域。但它不起作用。
这确实......
function getZone() {
var slidingZone = $find("<%= slidingZone.ClientID %>");
return slidingZone;
}
你能告诉我为什么第一个不工作吗?
顺便说一下,我这样用它......function hideTreePane() {
var paneId = "<%= slidingPane.ClientID %>";
getZone().undockPane(paneId);
return true;
}
答案 0 :(得分:4)
您需要调用从getZone返回的函数:
getZone()().undockPane( paneId );
它无效,因为函数getZone
本身没有名为undockPane
的成员。
修改强>
我认为最好这样做:
function getZone() {
if ( getZone.cache === undefined )
getZone.cach = $find("<%= slidingZone.ClientID %>");
return getZone.cache;
}
然后你会这样打电话:
getZone().undockPane( paneId );
答案 1 :(得分:4)
因为你返回一个函数而你需要评估它... 如果使用第一个功能,这可能有用..
function hideTreePane() {
var paneId = "<%= slidingPane.ClientID %>";
var zoneFunc = getZone();
zoneFunc().undockPane(paneId);
return true;
}
答案 2 :(得分:2)
在您的第一个示例中,您将返回一个函数,因此getZone()
成为一个函数,您需要getZone()()
来获取所需的slidingZone
值。
在这种情况下,无需将返回值包装在函数中。
答案 3 :(得分:2)
好吧,第一个函数返回一个函数,你想要执行内部函数。
如果您调用它的结果,您将看到它的工作,例如:
getZone()();
我认为你想要以下内容,使用一个立即执行的匿名函数,只调用$find
方法一次,存储其结果:
var getZone = (function() {
var slidingZone = $find("<%= slidingZone.ClientID %>");
return function () { return slidingZone; };
})();
答案 4 :(得分:2)
您将从第一个示例返回一个函数,而不是值。您需要评估它的工作功能。尝试类似的东西。
var slidingZone;
function getZone() {
if (!slidingZone) {
slidingZone = $find( ... );
}
return slidingZone;
}
最好将它作为“类”的一部分,以便缓存变量不在全局范围内。