javascript - 方法调用中的 var 未重新定义
javascript - var in method call not redefined
我编写了一个完美运行的代码,但是当我将硬编码参数切换到一个变量时,我遇到了一个我理解但不知道如何解决的问题。另外,我不知道是否有任何一种模式可以解决这个问题。
var IsIframeAdded = (function(){
var nr_of_elem = 0;
var elem;
events.subscribe( elem + "Loaded", function(length){
disableIframes(elem);
nr_of_elem = length;
});
//events.subscribe() must be placed above checkIfElemAdded()
var checkIfElemAdded = function() {
elem = functional.scripts[0].class; //Change-set the value of elem variable
if ( is_page() || is_page('shop') || is_page('portfolio') || is_page('fl-studio-song-starter') ) {
domCallback.isElemAdded( elem, nr_of_elem ); //check if iframe is added to the DOM
}
};
events.subscribe( "JSONloaded", checkIfElemAdded );
events.subscribe( "loadMoreClicked", checkIfElemAdded );
})(); // !isIframeAdded
$('.music-portfolio-query').on('click', '.showmore-btn', function(){
events.publish( "loadMoreClicked" );
});
enter code here
因为我在代码中用注释做了标记,所以我必须将 events.subscribe() 保留在名为 checkIfElemAdded 的函数之上。这样我就避免在 domCallBack.isElemAdded()
的响应中使用 setTimeout()
我已经提到我理解这个问题所以我会尝试描述它:
Events.subscribe() 没有监听正确的事件名称。
问题出在 events.subscribe() 方法调用中的 elem 变量
该变量是在脚本加载时设置的,这对于使用从 JSON 文件中提取的元素设置变量来说还为时过早。
该调用中的变量 elem 应在 JSONloaded 事件之后加载。
(我试图避免 setTimeout 解决方案)
是否有经验丰富的开发人员可以帮助我解决这个问题?
谢谢
我自己找到了解决方案,所以如果有人需要它,就在这里。
var IsIframeAdded = (function(){
var nr_of_elem = 0;
var elem;
var checkIfElemAdded = function() {
elem = functional.scripts[0].class; //Change-set the value of elem variable
events.subscribe( elem + "Loaded", function(length){
disableIframes(elem);
nr_of_elem = length;
});
//events.subscribe() must be placed above domCallback.isElemAdded()
if ( is_page() || is_page('shop') || is_page('portfolio') || is_page('fl-studio-song-starter') ) {
domCallback.isElemAdded( elem, nr_of_elem ); //check if iframe is added to the DOM
}
};
events.subscribe( "JSONloaded", checkIfElemAdded );
events.subscribe( "loadMoreClicked", checkIfElemAdded );
})(); // !isIframeAdded
$('.music-portfolio-query').on('click', '.showmore-btn', function(){
events.publish( "loadMoreClicked" );
});
我编写了一个完美运行的代码,但是当我将硬编码参数切换到一个变量时,我遇到了一个我理解但不知道如何解决的问题。另外,我不知道是否有任何一种模式可以解决这个问题。
var IsIframeAdded = (function(){
var nr_of_elem = 0;
var elem;
events.subscribe( elem + "Loaded", function(length){
disableIframes(elem);
nr_of_elem = length;
});
//events.subscribe() must be placed above checkIfElemAdded()
var checkIfElemAdded = function() {
elem = functional.scripts[0].class; //Change-set the value of elem variable
if ( is_page() || is_page('shop') || is_page('portfolio') || is_page('fl-studio-song-starter') ) {
domCallback.isElemAdded( elem, nr_of_elem ); //check if iframe is added to the DOM
}
};
events.subscribe( "JSONloaded", checkIfElemAdded );
events.subscribe( "loadMoreClicked", checkIfElemAdded );
})(); // !isIframeAdded
$('.music-portfolio-query').on('click', '.showmore-btn', function(){
events.publish( "loadMoreClicked" );
});
enter code here
因为我在代码中用注释做了标记,所以我必须将 events.subscribe() 保留在名为 checkIfElemAdded 的函数之上。这样我就避免在 domCallBack.isElemAdded()
的响应中使用 setTimeout()我已经提到我理解这个问题所以我会尝试描述它:
Events.subscribe() 没有监听正确的事件名称。
问题出在 events.subscribe() 方法调用中的 elem 变量 该变量是在脚本加载时设置的,这对于使用从 JSON 文件中提取的元素设置变量来说还为时过早。 该调用中的变量 elem 应在 JSONloaded 事件之后加载。 (我试图避免 setTimeout 解决方案)
是否有经验丰富的开发人员可以帮助我解决这个问题?
谢谢
我自己找到了解决方案,所以如果有人需要它,就在这里。
var IsIframeAdded = (function(){
var nr_of_elem = 0;
var elem;
var checkIfElemAdded = function() {
elem = functional.scripts[0].class; //Change-set the value of elem variable
events.subscribe( elem + "Loaded", function(length){
disableIframes(elem);
nr_of_elem = length;
});
//events.subscribe() must be placed above domCallback.isElemAdded()
if ( is_page() || is_page('shop') || is_page('portfolio') || is_page('fl-studio-song-starter') ) {
domCallback.isElemAdded( elem, nr_of_elem ); //check if iframe is added to the DOM
}
};
events.subscribe( "JSONloaded", checkIfElemAdded );
events.subscribe( "loadMoreClicked", checkIfElemAdded );
})(); // !isIframeAdded
$('.music-portfolio-query').on('click', '.showmore-btn', function(){
events.publish( "loadMoreClicked" );
});