我在Backbone View中丢失了“this”的上下文

时间:2016-01-25 18:17:52

标签: javascript coffeescript this

我尝试使用去抖功能升级我的先行功能,到目前为止,我只使用以下代码取得了成功。它确实是去抖动请求,但是当我将函数定义为something = func (args) ->时,它不会附加到View实例,我无法通过@collection访问View的集合。但是,可以在View实例上找到定义为something: ->的所有其他方法。为什么会这样?感谢。

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

1 个答案:

答案 0 :(得分:0)

我认为这是因为您在函数productsView()中声明了requestDebouncer。 尝试将requestDebouncer作为实例方法

kd> !handle 430

PROCESS 85c91030  SessionId: 0  Cid: 0388    Peb: 7ffdc000  ParentCid: 01e8
    DirBase: 7ee841c0  ObjectTable: 8da023f0  HandleCount: 539.
    Image: svchost.exe

Handle table at 9a3da000 with 539 entries in use

0430: Object: 8480e038  GrantedAccess: 00100080 Entry: 8da01860
Object: 8480e038  Type: (844f9ac8) File
    ObjectHeader: 8480e020 (new version)
        HandleCount: 1  PointerCount: 2
        Directory Object: 00000000  Name: \ {HarddiskVolume2}

并将其称为@requestDebouncer

P.S。我从未使用过coffeescript,只猜测它是如何工作的。