2011-11-21 10 views
10

の属性を誤解していたことがわかりました。Backbone.Viewです。基本的に私の見解では、そのモデルの属性に基づいて動的なid属性が必要です。動的IDを使用したバックボーンビュー

<script type="text/template" id="item_template"> 
    <li class="item" id="{{identifier}}"> 
    <span class="name">{{name}}</span> 
    </li> 
</script> 

はしかし、私は、デフォルトでは他の要素、divにこのコンパイルされたテンプレートを入れていたものをバックボーンが実際にやっていたことに気づい:私は単に私のテンプレートでそれを指定したので、私は、私はこの正常に動作していたと思いました。私はドキュメントを読むことでこれについてもっと学びましたが、私はまだ動的なidを作成する方法について混乱しています。

好ましくは、上記のテンプレートのものが私のelとして機能するようにしたいと思っています。それは既に私が望むものすべてを持っているからですが、それが可能かどうかはわかりません。だから私は、単純に、動的なid属性を指定する方法があるのだろうかと思います。

initializeメソッドthis.id = this.model.get('attr')の中で設定しようとしましたが、この時点までにすでに遅すぎたために何も効果がないようです。

私は現在、ちょうど追加するjQueryのを使用してやっているidrender()中:

this.el.attr(id: this.model.get('identifier')); 

それは動作しますが、それを行うための好ましい方法がある場合はもちろん、私は単純に聞いていますのよバックボーンを通じて。

答えて

20

はいバックボーンでこれを行うための標準的な方法があります。 Viewコンストラクタにidを渡すことができます。また、テンプレートをリファクタリングして、Backboneが親の<li>要素を作成するようにすることもできます。このシンプルなテンプレートをお試しください:

<script type="text/template" id="item_template"> 
    <span class="name">{{name}}</span> 
</script> 

をそして、あなたのビューにこれらを追加します。

myView = Backbone.View.extend({ 
    className: "item", 
    tagName: "li" 
}) 

そして、このようにそれをインスタンス化します。

var view = new YourView({ 
    model: mymodel, 
    id: mymodel.get('identifier') // or whatever 
}) 

幸運!

+0

もう一度お返事ありがとうございます。これは実際にはうまくいくようです:D私はそれを試して、正しいとマークするようになります:) –

+0

知らない人は、tagNameは指定されていなければdivにデフォルト設定されます。 私はコンテナ[フォーム、divなどを持っているテンプレートの数が表示されます...実際にはビューの一部でなければならず、テンプレートではないことがよくあります。 maxl0rdの答えで示されているように、 'constructor'で定義された一般的な解決策を持っているので、この答えは – PDA

1

あなたのビューを作成すると、ビューは、既存のプリレンダリングDOM要素を見つけるようになるセレクタに渡すには:

var id = "1234"; 
var view = YourView({el: '#'+id}); 
+0

要素は、事前にレンダリングされないが、それは私の知る限りではDOMではありません。それは、スクリプトタグ内にテンプレートとして存在します。 –

5

もう1つのアプローチがあります。ビューのインスタンスを作成するたびにidを渡すよりも便利です。

テンプレート:

<script type="text/template" id="item_template"> 
     <span class="name">{{name}}</span> 
</script> 

ビュー:

var MyView = Backbone.View.extend({ 
    tagName: 'li', 
    attributes: function(){ 
     return { 
      id: this.model.get('identifier'), 
      class: 'item'//optionally, you could define it statically like before 
     } 
    } 
}) 
+0

です。 – Mikhail

関連する問題