Доступ к родительскому свойству в обратном вызове jQuery - PullRequest
2 голосов
/ 31 октября 2008

Не уверен, правильно ли я сформулировал это, но в обратном вызове как мне ссылаться на свойство элементов управления базового класса?

Это давало мне покоя в течение некоторого времени, и я обычно обходил его, но я был бы благодарен, если бы кто-нибудь мог просветить меня о том, как я должен делать это правильно.

var base = function() {
    var controls = {};

    return {
        init: function(c) {
            this.controls = c
        },
        foo: function(args) {
            this.init(args.controls);
            $(this.controls.DropDown).change(function() {
                $(this.controls.PlaceHolder).toggle();
            });
        }
    }
};

Обязан,

Пол

Ответы [ 3 ]

2 голосов
/ 31 октября 2008

Используйте силу замыканий:

var base = function() {
    var controls = {};

    return {
        init: function(c) {
                this.controls = c
        },
        foo: function(args) {
                var self = this;

                this.init(args.controls);
                $(this.controls.DropDown).change(function() {
                        $(self.controls.PlaceHolder).toggle();
                });
        }
    }
};
2 голосов
/ 31 октября 2008

Хотя замыкания предпочтительнее , вы также можете использовать jquery bind для передачи объекта:

var base = function() {
    var controls = {};

    return {
        init: function(c) {
            this.controls = c
        },
        foo: function(args) {
            this.init(args.controls);
            $(this.controls.DropDown).bind('change', {controls: this.controls}, function(event) {
                $(event.data.controls.PlaceHolder).toggle();
            });
        }
    }
};
1 голос
/ 31 октября 2008

Вы должны использовать здесь закрытия.

var base = function() {
var controls = {};

return {
    init: function(c) {
            this.controls = c
    },
    foo: function(args) {
            this.init(args.controls);
            $(this.controls.DropDown).change(function(controls) {
                    return function(){
                        $(controls.PlaceHolder).toggle();
                    }
            }(this.controls));
    }
}

};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...