複数回レンダリングされるバックボーン ビューの jQuery クリック イベントを作成する最良の方法は何ですか? ビューのイニシャライザで $().on() を使用する必要があるようですが、レンダリング後に呼び出さない限り機能しません。
基本的に、テーブルをレンダリングし、行のクリック イベントをチェックしています。これが私が試していることです(coffeescriptで)。これは動作しません -
class MyGridView extends Backbone.View
el: '#myGrid'
template: _.template(TableTmpl)
initialize: ->
# $('tr',@el).on 'click', -> console.log($(@).attr('model')) # WRONG
$(@el).on 'click', 'tr', -> console.log($(@).attr('model')) # CORRECT
render: ->
$(@el).empty()
$(@el).append(@template({data: @collection.getPage()}))
これは機能しますが、孤立したクリック イベントが作成されますか?
class MyGridView extends Backbone.View
el: '#myGrid'
template: _.template(TableTmpl)
render: ->
$(@el).empty()
$(@el).append(@template({data: @collection.getPage()}))
$('tr',@el).click -> console.log($(@).attr('model'))
アップデート:
$().on() のパラメーターが欠落していたため、機能しませんでした。また、これを処理するより良い方法のように思われるイベントも試しました。これは次のように機能しました。
class MyGridView extends Backbone.View
el: '#myGrid'
template: _.template(TableTmpl)
events: {'click tr', 'selectModel'}
selectModel: ->
model = $(e.target).parent().attr('model')
console.log(model)
render: ->
$(@el).empty()
$(@el).append(@template({data: @collection.getPage()}))
$('tr',@el).click -> console.log($(@).attr('model'))