将变量传递给回调方法

Pass variable to callback method

这个问题与jQueryUI的对话框关系不大,与JavaScript有关。

我将一些变量传递给 ayb.dialogError(),并使用它们创建一个对话框。然后我传递了不同的值,但仍然使用第一个值。

以下脚本经过浓缩以突出问题,完整脚本位于 https://jsbin.com/muhijodima

open 回调中,如何访问传递给 ayb.dialogError() 的变量?

$(function(){

    ayb={};
    ayb.dialogErrorElem=undefined;

    ayb.dialogError=function(t,e) {
        if (typeof ayb.dialogErrorElem === 'undefined') {
            ayb.dialogErrorElem=$('<div/>').appendTo('body').dialog({
                open: function(event, ui){
                    console.log('dialog.open',t,e);
                    //t=function(){return t;}
                    //e=function(){return e;}
                },
            });
            console.log(ayb.dialogErrorElem);
        };
        ayb.dialogErrorElem.dialog('open');
    }

    $('#e1').click(function(){ayb.dialogError('Title1',['error1-1','error1-2'])});
    $('#e2').click(function(){ayb.dialogError('Title2','error2-1')});

});

if (typeof ayb.dialogErrorElem === 'undefined') {

单击 two button

ayb.dialogErrorElem 不是 undefined

jsbin https://jsbin.com/rugarizedo/edit?html,output

我认为这不是最好的方法,但是,传递的参数可用于 open 回调。

下方的浓缩脚本突出概念,完整脚本位于 https://jsbin.com/segoxewape/edit?html,output

如果有更好的方法使回调中的参数可用(我确信有),请发表评论。

ayb.dialogError=function(t,e) {
    getEm=function(){return {e:e,t:t};}
    var v={e:e,t:t};    //Won't work
    if (typeof this.dialog === 'undefined') {
        this.dialog=$('<div/>', {})
        .dialog({
            open: function(event, ui){
                console.log('Wrong values in dialog.open!',t,e,v.t,v.e);
                var o=getEm();
                console.log('Right values!',o);
            }
        });
    };
    this.dialog.dialog('open');
}