1

次のように @template() を @el に割り当てても問題ありませんか?

someview.js.coffee

class SomeView extends Backbone.View
  template: JST["app/templates/sometemplate"]

  events:
    'click' : 'onClick'

  initialize: ->

  render: ->
    @el = @template()

  onClick: ->
    #do something

index.js.コーヒー

class IndexView extends Backbone.View
  initialize: ->
    @collection.on('reset', @render, this)

  render: ->
    $(@el).html('')
    for m in @collection.models
      view = new App.Views.SomeView(model: m)
      $(@el).append(view.render().el)

sometemplate.jst.hamlc

.someview_template
  .stuff_inside

私がいる状況では、SomeView クラスが div でラップされており、「.someview_template」要素に直接割り当てたいクリック イベントが失われています。これを解決するために私が考えることができる方法は、 @el = @template() をリセットすることです...それは可能ですか、それともこれを行う正しい方法ですか?

Backbone.View の @el は常にそれを含む div である必要があり、テンプレートはその div 内に含まれる要素のみである必要がありますか? @el が @template() で見つかったルート ノードに自動的に設定されると、より基本的なように思えます。sometemplate.jst.hamlc に ".stuff_inside" のみを含め、SomeView で $(@el).addClass('someview_template') を設定するだけで、イベントがその要素に割り当てられていることを確認できますか?

ありがとう!

4

1 に答える 1

5

いいえ、それはいくつかの理由で問題ありません。

  1. イベント バインディングが失われる@elため、どのイベントも機能しなくなります。
  2. キャッシュされたものはもう@$el一致@elしません。

を置き換えたい場合は、次@elを使用します@setElement

setElement view.setElement(element)

バックボーン ビューを別の DOM 要素に適用する場合は、setElementを使用します。これにより、キャッシュされた参照も作成され$el、ビューの委任イベントが古い要素から新しい要素に移動されます。

おそらく、次のようなものがもっと必要です。

render: ->
  @setElement(@template())
  @
于 2012-07-27T19:16:09.433 に答える