我正在尝试使用Coffeescript中的HTML选择设置我的Backbone视图类的属性,我意识到我需要通过javascript闭包将此(@)注入回调/处理程序以维持范围。但我似乎无法弄清楚如何使用“do”只执行页面加载上的功能
dropdown = $('<select />') .on 'change', do(myView = @) -> myVieW.prop = @.value
感谢您的帮助!
答案 0 :(得分:1)
do
表示法编译成IIFE,你仍然需要实际的处理函数:
dropdown = $('<select />') .on 'change', do(myView = @) -> (e) -> myVieW.prop = @.value
# or wrap the whole handler assignment:
do(myView = @) ->
dropdown = $('<select />') .on 'change', (e) -> myVieW.prop = @.value
或者你只是使用词汇this
:
dropdown = $('<select />') .on 'change', (e) => @.prop = e.target.value
dropdown = $('<select />') .on 'change', (e) => @.prop = dropdown.val()
答案 1 :(得分:1)
在Backbone中执行此操作的标准方法如下:
class MyView extends Backbone.View
events:
'change select': 'onChange'
onChange: (e) ->
el = e.currentTarget
@prop = el.value
话虽如此,在视图上设置一些属性也是一种气味,暗示了缺失的模型。
在视图之外设置一些属性是一种明确的气味,并邀请重新评估架构。