Javascript jQuery mobile touch事件处理、此关键字上下文和正确使用闭包

Javascript jQuery mobile touch事件处理、此关键字上下文和正确使用闭包,javascript,jquery,jquery-mobile,event-handling,closures,Javascript,Jquery,Jquery Mobile,Event Handling,Closures,如果我不太清楚,请原谅。我正试图通过实践一下子学到很多东西 我有一个包含多个事件的事件侦听器,如下所示: $account.on({ tap: function() { accountOpen = true; ui.openAccount(this); }, swiperight: etc. etc. } var account = (function(){ var acct = {

如果我不太清楚,请原谅。我正试图通过实践一下子学到很多东西

我有一个包含多个事件的事件侦听器,如下所示:

$account.on({
        tap: function() { 
            accountOpen = true;
            ui.openAccount(this);
        },
        swiperight: etc. etc.
}
var account = (function(){
    var acct = {
        this.container = $(this),
        this.closeBtn = $(this).find('.close-btn')
    }
    return acct;
}());
我的所有ui函数都在一个对象文本中。例如:

var ui = PROJECT.ui = {
    openAccount: function(account) {
        var $account = $(account),
            $trans   = $('.transactions'),
            $closeBtn= $account.find('.close-btn');

        $account.removeClass('pay-open').removeClass('move-open');

        $trans.appendTo($a)
            .slideDown(400,function(){
                $closeBtn.fadeIn(100);
            });   

    }
}
将事件目标/this从事件处理程序发送到ui.openAccount()函数而不必重复捕获变量的正确方法是什么?(即,我如何停止重复我自己?)我是否使用构造函数?是否有一个带有关闭的account对象可以派上用场

我是这样想的:

$account.on({
        tap: function() { 
            accountOpen = true;
            ui.openAccount(this);
        },
        swiperight: etc. etc.
}
var account = (function(){
    var acct = {
        this.container = $(this),
        this.closeBtn = $(this).find('.close-btn')
    }
    return acct;
}());

我可以将var帐户发送到ui.openAccount(),但我知道我做得肯定不对。

尝试将事件传递给正在调用的函数:

$account.on({
    tap: function(e) {
        var my_cool_new_object = {}; 
        console.log("your event is here")
        console.log(e)
        accountOpen = true;
        // populate your object
        my_cool_new_object.target = e.target;
        my_cool_new_object.foo = bar;
        ...
        // pass to method
        ui.openAccount(my_cool_new_object);
    },
    swiperight: etc. etc.
}

尝试将事件传递给正在调用的函数:

$account.on({
    tap: function(e) {
        var my_cool_new_object = {}; 
        console.log("your event is here")
        console.log(e)
        accountOpen = true;
        // populate your object
        my_cool_new_object.target = e.target;
        my_cool_new_object.foo = bar;
        ...
        // pass to method
        ui.openAccount(my_cool_new_object);
    },
    swiperight: etc. etc.
}

是的,通过活动目标是您的最佳选择。如果您想改为发送jquery对象,您可以执行ui.openAccount($(this))或ui.openAccount($(e.target)),这样(this/e.target)中就有更多的ui组件需要映射,以便像这样访问它们。。。account.button或account.exit。。因此,在将(this/e.target)发送到ui.openAccount(coolNewObjectHere)之前,我还需要另一个步骤来构造该对象。我需要将业务逻辑与表示分离,我认为这是这里更大的问题。@这基本上就是我要做的,但将其存储为ui.object的一部分,因此,不必在每个手柄上重复该过程是的,传递事件目标是您的最佳选择。如果您想改为发送jquery对象,您可以执行ui.openAccount($(this))或ui.openAccount($(e.target)),这样(this/e.target)中就有更多的ui组件需要映射,以便像这样访问它们。。。account.button或account.exit。。因此,在将(this/e.target)发送到ui.openAccount(coolNewObjectHere)之前,我还需要另一个步骤来构造该对象。我需要将业务逻辑与表示分离,我认为这是这里更大的问题。@这基本上就是我要做的,但将其存储为ui.object的一部分,这样就不必在每个处理程序中重复该过程