javascript – 嵌套匿名函数中的CoffeeScript类属性

我熟悉隐藏模式方法,但我仍然围绕对象原型.

我正在尝试创建一个基本类来控制我网站上的某个部分.我遇到的问题是在不同的范围内丢失已定义的类变量.例如,下面的代码工作正常,并在对象内完美地创建属性.但是,当我跳转到jQuery回调时,我失去了所有关于存储一些jQuery对象的类变量的知识以供多种用途.

有没有办法从回调函数中获取它们?

class Session
    initBinds: ->
        @loginForm.bind 'ajax:success', (data, status, xhr) ->
            console.log("processed")
            return
        @loginForm.bind 'ajax:before', (xhr, settings) ->
            console.log @loader // need access to Session.loader
            return
        return
    init: ->
        @loginForm = $("form#login-form")
        @loader = $("img#login-loader")
        this.initBinds()
        return

解决方法:

jQuery的AJAX回调是executed in the context of

… an object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax)

所以@(AKA this)不是调用回调时的Session实例. CoffeeScript-ish方法是使用fat-arrow将回调绑定到Session实例:

The fat arrow => can be used to both define a function, and to bind it to the current value of this, right on the spot. This is helpful when using callback-based libraries like Prototype or jQuery, …

我想你想这样说:

@loginForm.bind 'ajax:before', (xhr, settings) =>
    console.log @loader // --------------------^^
    return

并且您根本不需要返回,除非您不希望取消AJAX调用时,回调中的最后一个语句可能会意外地评估为false;如果你想成为偏执(一个合理的位置,因为他们真的是为了得到我们)那么最后一个简单的真值就足以从回调中得到一个非假值:

@loginForm.bind 'ajax:before', (xhr, settings) =>
    console.log @loader // --------------------^^
    true
上一篇:javascript – 检查用户是否阻止第三方域名


下一篇:Rails / Javascript:如何将rails变量注入(非常)简单的javascript中