我有一个主页面,它通过ajax加载子页面,然后当子页面关闭时,会运行一个全局范围的回调函数来执行任何必要的操作,例如以某种方式刷新主页面内容。
我遇到了一种情况,子页面本身需要定义回调函数,因为它是唯一知道关闭时需要做什么的地方。
在这种情况下,回调函数是另一个接受参数的函数的闭包,并且这些参数是使用子页面上的元素从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参数在编写时进行求值?
有更好的方法吗?
好吧,你可以在子页面上创建一个函数来创建回调(并收集其数据),比如:
main-page:
function open-child(createCallback) {
callback = createCallback();
}
child-page:
createCallback = function() {
var id = $("#child-page-element").data("id");
return function () {
some_action(id);
};
};