わかりましたので、モデルとして使用しているキーペアの値の配列があります。
var acs = [{'label':'input box'},{'label':'text area'}];
残りのコードは次のようになります
var Action = Backbone.Model.extend({});
var action = new Action(acs);
var ActionView = Backbone.View.extend({
tagName:"li",
template: _.template($('#actions-template').html()),
events:{
"click":"makeInput"
},
render:function(){
$(this.el).html(this.template(this.model.toJSON()));
$(".hero-unit>ul").append(this.el);
return this;
},
makeInput:function(){
alert("im in");
}
});
var actionView = new ActionView({model:action});
actionView.render();
問題は、ビューに関するものです。これが私が望んでいるビューである場合、私が渡すモデルをどのようにループできますか
<script type="text/template" id="actions-template">
<% _.each(action, function(acs) { %>
<a class="btn"><%= label %></a>
<% }); %>
</script>
私の見解と私が信じるループには何か問題があります。手がかりはありますか?ありがとう!
おそらく2つのことをしたいと思うでしょう。
テンプレートに提供するデータを調整します。
$(this.el).html(this.template({
action: this.model.toJSON()
}));
label
の代わりにacs.label
を使用するようにテンプレートの内側部分を調整します。
<a class="btn"><%= acs.label %></a>
デモ: http://jsfiddle.net/ambiguous/xczBy/
考え直してみると、単一のモデルではなくコレクションを使用する必要があると思います。これを追加する必要があります。
var ActionCollection = Backbone.Collection.extend({
model: Action
});
render
を調整してthis.collection
を使用します。
$(this.el).html(this.template({
actions: this.collection.toJSON()
}));
そして、次のように起動します:
var actions = new ActionCollection(acs);
var actionView = new ActionView({collection: actions});
最後に、テンプレートのactions
を参照します。
<% _.each(actions, function(acs) { %>
デモ: http://jsfiddle.net/ambiguous/6VeXk/
これは、Backboneのキー/値ベースのモデルによりよく一致します。