我有一个咖啡脚本类“OutlayForm”和一个子类“EditOutlayForm”。在超类中,事件处理程序 (convert_amount) 绑定到输入字段。当创建超类的对象时一切正常,但是当创建子类的对象并触发事件处理程序时,似乎上下文丢失了。
一个错误告诉我在 convert_amount @amount_field 是“未定义”,并且 console.log(this) 给了我输入字段而不是对象,尽管我使用了双箭头 (=>)
我的代码:
class window.OutlayForm
...
init: (@wrapper) =>
@bind_buttons()
bind_buttons: =>
@amount_field = @wrapper.find('input[name="outlay[amount]"]')
@amount_field.on('keydown', @convert_amount)
convert_amount: =>
#some converting on @amount_field
class window.EditOutlayForm extends window.OutlayForm
constructor: (@outlay) ->
@super
bind_buttons: =>
super
#ajax callback:
@wrapper = $('<div class="edit_outlay_form"></div>')
@outlay.before(@wrapper.append(data))
@bind_buttons()
有人知道我做错了什么吗?
编辑:
首先:我使用 Rails 3.2.12,带有 coffee-rails gem (3.2.2) 和 jquery-rails gem。
我找到了错误的根源,但无法解决我的问题。
如果我运行这个小提琴,控制台会向我显示“sub”,正如我所料。但是如果我在我的服务器上运行同样的代码,我会得到“超级”。我所做的一切都是为了打电话
new D
在 $.ready() 函数中。错误是否有可能来自该错误,或者它肯定来自我的咖啡脚本版本?(我无法改变,因为它已经是最新的 rails gem)