show
関数を定義すると、 @
(AKA this
)は実際にはwindow
そうです
show: => console.log(@)
にバインドshow
しwindow
ます。問題は、単にオブジェクトを定義しているだけなので、バインドするものがないことです。クラスを定義していないので、this
ですwindow
。App
次のように明示的に参照できます。
App =
#...
show: -> alert(App.foo)
デモ: http: //jsfiddle.net/ambiguous/3sRVh/
言うことは期待を設定するので、this.foo
ininit
は正しいことをします。App.init()
this
this
必要なものを手動で接続することもできます。
bindEvent: ->
$('#test').click => @show()
# or
bindEvent: ->
_this = @ # JavaScript style
$('#test').click -> _this.show()
デモ: http: //jsfiddle.net/ambiguous/byL45/、http://jsfiddle.net/ambiguous/MT8fG/
または、代わりにアプリのクラスを作成することもできます。
class App
constructor: ->
@foo = 'bar'
@bindEvent()
bindEvent: ->
$('#test').click(@show)
show: =>
console.log(@foo)
new App
そうshow: =>
すれば、期待どおりに動作します。
デモ: http: //jsfiddle.net/ambiguous/byatH/