我有一个主页面通过ajax加载子页面,然后当子页面关闭时,运行全局范围的回调函数来执行任何必要的操作,例如以某种方式刷新主页面内容。 / p>
我遇到了这样一种情况:子页面本身需要定义回调函数,因为它是唯一知道关闭时需要做什么的地方。
在这个实例中,回调函数是另一个接受参数的函数的闭包,参数是使用子页面上的元素从jquery表达式派生的。
问题是回调函数运行时子页面已被卸载,所以当评估封闭函数的参数列表时,jquery无法找到目标元素。
我能够通过使用全局范围的临时变量来保存参数来解决这个问题,但是当页面仍在内存中时,我宁愿“强制”评估jquery表达式。
无效的设置的伪代码示例:
main-page:
callback = null;
newcallback = some_function;
function open-child(newcallback) {
callback = newcallback;
//load child page
};
function close-child(){
//unload child page
callback();
}
child-page:
child-page-element
callback = function () {
some_action( $("#child-page-element").data("id") );
};
close-child();
通过添加一个全局变量,我可以做到这一点:
child-page:
child-page-element
global_var = $("#child-page-element").data("id");
callback = function () {
some_action(global_var);
};
close-child();
问题:
jquery param可以“强制”评估,因为我写了吗?
是否有更好的方式?
答案 0 :(得分:1)
好吧,你可以在子页面上创建一个函数来创建回调(并收集其数据),如:
main-page:
function open-child(createCallback) {
callback = createCallback();
}
child-page:
createCallback = function() {
var id = $("#child-page-element").data("id");
return function () {
some_action(id);
};
};