2

だから私は2つの見解を持っています。コレクションにバインドされた 1 つの「親」ビューと、コレクション内の個々のモデルにバインドされた多数のサブビュー。

class ResultTable extends Backbone.View
    el:"body"
    initialize:()->
       @collection.bind "add", @add

    add:(model)->
       new ModelView({model:model})

class ModelView extends Backbone.View
    el: "#resultsTableList"
    initialize:()=>
       @model.on "selected",@select
       @render()

    render:()=>
       #append template 

    select:(e)=>
       e.preventDefault()
       console.log(@model)

    events:
       'click' : 'select'

したがって、リスト要素の 1 つをクリックすると、すべての ModelViews の選択機能がトリガーされます。これを構築した方法では、クリックされた特定のモデルのみが表示されると思いました。どうしたの?

テンプレート HTML-

<div id="resultsTableContainer" class="resultsContainer">
    <ul id="resultsTableList">
    </ul>

これは各モデル用です-

<li class="result">
{{ ipAddress }}


  </li>
4

2 に答える 2

3

すべての ModelViews は同じ DOM 要素にバインドされています。

class ModelView extends Backbone.View
    el: "#resultsTableList"

そして、各インスタンスは次のクリックにバインドされます#resultsTableList:

events:
   'click' : 'select'

セレクターなしでイベントを指定するeventsと、それがビューの にバインドされることに注意してくださいel

を省略するselectorと、イベントがビューのルート要素 ( ) にバインドされますthis.el

その結果、複数のビューがまったく同じ DOM 要素のクリックにバインドされます。

elModelView から and を削除して、Backbone に次の<li>ように構築させたいと思います。

class ModelView extends Backbone.View
    tagName: 'li'
    className: 'result'
    #...

次に、 のelが にModelViewなり<li class="result">、クリック ハンドラが にアタッチされます<li>。レンダリングを調整して、呼び出し元でもels を挿入する必要があります。<ul id="resultsTableList">

于 2013-04-17T22:44:05.643 に答える