jQuery事件,传递与上下文更改的参数

时间:2013-01-08 23:08:45

标签: jquery

我有这个基本代码:

app.Modules.myModule = {
    init: function(){
        this.bindEvents();
    },

    bindEvents: function(){
        app.Events.on('user:added', this.userAdded.call(this));
        this.username = $('#username');
    },

    userAdded: function(event, params){
        console.log(params);
        this.username.text(params.username);
    }
};

现在我遇到的问题是,如果我按原样调用this.userAdded,则params不会传递给userAdded函数。如果我不使用'call'并且只是在userAdded函数中执行this.userAdded,那么'this'的上下文就是jQuery事件而不是'app.Modules.myModule',就像我需要它一样。 / p>

所以我的问题是,如何在userAdded函数中将'this'的上下文保存到Object本身(myModule)并且能够将params参数传递给它?

1 个答案:

答案 0 :(得分:1)

如果将模块定义为函数,则可以在实例化时将上下文设置为变量。例如:

app.Modules.myModule = function(){

    var context = this;
    context.init = function(){
        context.bindEvents();
    };

    context.bindEvents = function(){
        app.Events.on('user:added', context.userAdded);
        context.username = $('#username');
    };

    context.userAdded = function(event, params){
        console.log(params);
        context.username.text(params.username);
    } ;       
};

var module = new app.Modules.myModule();

上下文变量现在将引用对象的上下文,并可在函数中使用。确保在初始化对象时使用“new”关键字。