1

バックボーンを使用しており、ビューで最初のコレクションを解析したいと考えています。

私の最初の質問は、undescore本当にそれを行うための最良の方法ですか? 私は聞いたことがありますmustache.js

次のことは、どうすればいいのかわからないということです:

var A = new Model();
var B = new Model();
var Mole = new Collection([A, B]);
var View = View({model: A, collection: Mole });
View.render();

これが私のレンダリング方法です:

render: function(){
  this.template = _.template($('template').html());
  $(this.el).html(this.template(this.collection.models)); //I don't know what to send here
}

これが私のテンプレートです

<script type="text/template" id="template">
  <% _.each(collection, function(model){ %> //I don't know what to get here
    <% model.name %>
  <% }); %>
</script>
4

1 に答える 1

14

まず第一に_.template、jQuery オブジェクトではなく、テンプレートからのテキストが必要です。つまり、次のようになります。

this.template = _.template($('template'));

これである必要があります:

this.template = _.template($('template').html());

次に、コンパイルされたテンプレート関数は、データのキーと値のペアを確認する必要があります。詳細なマニュアルから(これは口ひげ、ハンドルバー、およびアンダースコア BTW に適用されます):

テンプレート関数を評価するときは、テンプレートの自由変数に対応するプロパティを持つデータオブジェクトを渡します。

だからあなたはこれを言いたい:

this.$el.html(this.template({
    collection: this.collection.toJSON()
}));

そして、テンプレートでこれを言うことができます:

<% _.each(collection, function(model) { %>
  <%= model.name %>
<% }); %>

考慮すべき点がいくつかあります。

  1. バックボーン ビューには既に jQuery がラップthis.elされてthis.$elいるため、必要はありません$(this.el)
  2. シリアル化されたデータは通常、 を使用してテンプレートに渡されtoJSONます。これは、Mustache と Handlebars に二重に適用されます。これらは他に何も理解できないためです。
  3. <%= ... %>テンプレートで出力を取得するには、次のように言う必要があります。<% ... %>少しの JavaScript コードを評価するだけで、何も残しません。そのためには、補間区切り文字 (<%=および%>デフォルト) を使用する必要があります。
于 2013-01-29T01:41:15.120 に答える