0

私はこの基本的なコードを持っています:

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」ではありません。

だから私の質問は、「this」のコンテキストを userAdded 関数内でオブジェクト自体 (myModule) に保持し、params 引数に渡すことができるようにするにはどうすればよいですか?

4

1 に答える 1

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」キーワードを使用してください。

于 2013-01-08T23:14:49.017 に答える