2016-01-25 4 views
0

Я пытаюсь обновить свой typeahead с помощью функции debounce, и до сих пор я имел успех только со следующим кодом. Он выполняет запрос debounce, но когда я определяю функцию как something = func (args) ->, он не привязан к экземпляру View, и я не могу получить доступ к коллекции View через @collection. Однако любой другой метод, определенный как something: ->, можно найти в экземпляре View. Почему это происходит? Благодарю.Я теряю контекст `this` в представлении Backbone

class productsView extends Marionette.CompositeView 

    onDomRefresh: (options) -> 
     @initTypeahead() 

    initTypeahead: -> 
     console.log @ 
     # outputs: productsView{...} 
     @ui.typeahead_input.typeahead { 
      hint: true 
      highlight: true 
      minLength: 1 
     }, 
      source: (q, sync, async) => 
       requestDebouncer q, sync, async 

    requestDebouncer = _.debounce (q, sync, async) => 
     console.log @ 
     # outputs: function productsView()... 
     console.log "debounced" 
    , 300 

ответ

0

Я думаю, это произошло потому, что вы объявили requestDebouncer в функции productsView(). Попробуйте сделать requestDebouncer как метод экземпляра

requestDebouncer: -> _.debounce (q, sync, async) => 
    console.log @ 
    console.log "debounced" 
, 300 

И называют его @requestDebouncer

P.S. Я никогда не использовал coffeescript, только догадываюсь, как его работа.

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