2013-04-17 2 views
2

Пытаясь выяснить, лучший подход, чтобы иметь эту работу:CoffeeScript объекты, JQuery обратного вызова и переменных конфликты сферы применения и путаница

class Person 

    constructor: (@el) -> 
    @el = $(el) 
    this.bind() 

    bind: -> 
    @el.find('.something').on 'click', -> 
     $(this).hide()  # conflict! 
     this.do_something() # conflict! 

    do_something: -> 
    alert 'done!' 

Я знаю, что я могу использовать хэш ракеты (=>) и затем доступ this.do_something из моего обратного вызова, но тогда это конфликтует с callback 'this', и поэтому jquery пытается выбрать объект, а не element '.something'. Как это решить?

ответ

3

Вы не можете получить this, чтобы обратиться к различным объектам. Используйте другой идентификатор, сохраняя ссылку на экземпляр this во вспомогательной переменной:

bind: -> 
    person = this 
    @el.find('.something').on 'click', -> 
     $(this).hide() 
     person.do_something() 
+0

Это лучший подход? Спасибо, кстати. –

+1

@ Zenph Да, это лучший (наиболее читаемый) подход. Вы не можете использовать 'this' для указания на разные объекты в том же контексте. –

+0

Я понимаю контекст;) Хотел бы, чтобы у CS или jQuery была переменная прокси для этого для таких конфликтов. –

Смежные вопросы