Как получить доступ к методу объекта в событии jQuery - PullRequest
2 голосов
/ 30 июня 2011

Я пробую свои силы в разработке приложения на JavaScript, которое ориентировано на объекты с помощью jQuery. Однако я столкнулся с проблемами при использовании обработчиков событий jQuery в классе моего приложения. Вот оскорбительный фрагмент кода:

<script type="text/javascript">
function Library(s_list) {
    this.songs = s_list;
    this.song_table = $('#songs');
    this.search_input = $('#search-txt');

    this.refresh_table = function() {
        this.song_table.html('<tr id="fields"><td></td><td>Name</td><td>Artist</td><td>Album</td><td>Time</td></tr>');

        for ( index in this.songs ) {
            if ( (index % 2) == 0 ) {
                this.song_table.append('<tr class="l"><td></td><td>' + this.songs[index] + '</td><td>Artist</td><td>Album</td><td>Time</td></tr>');
            } else {
                this.song_table.append('<tr class="d"><td></td><td>' + this.songs[index] + '</td><td>Artist</td><td>Album</td><td>Time</td></tr>');
            }
        }
    }

    this.filter_songs = function(text) {
        // Not implemented
    }

    this.search_input.keyup(function() {
        var sender = $(this);
        var s = $.trim(sender.val());

        // I need to access the filter_songs method of the Library class here. Normally I would use "this" but jQuery uses it for the html object that triggered the event
    });

    this.refresh_table();
}

var library;

$(document).ready(function() {
    library = new Library(song_list);

});

</script>

Проблема в том, что мне нужен доступ к методу filter_songs класса Library из обработчика событий jQuery search_input.keyup. Обычно я бы использовал «this», но jQuery использует его для html-объекта, который вызвал событие. Я неправильно подхожу к дизайну этого приложения или есть способ решить эту проблему? Спасибо за помощь.

1 Ответ

3 голосов
/ 30 июня 2011

Вам нужно закрытие.Попробуйте это:

var self = this;
this.search_input.keyup(function() {
            var sender = $(this);
            var s = $.trim(sender.val());
            self.filter_songs(s);
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...