Петли в шаблоне подчеркивания JS
Итак, ребята, у меня есть этот массив пар ключей, которые я использую в качестве модели:
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>
Что-то не так с моей точкой зрения и циклом, который я считаю. Есть какие-нибудь подсказки? Спасибо!
1 ответ
Возможно, вы захотите сделать две вещи:
Настройте данные, которые вы предоставляете для шаблона:
$(this.el).html(this.template({ action: this.model.toJSON() }));
Отрегулируйте внутреннюю часть шаблона для использования
acs.label
вместо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.