我刚刚开始学习backbone.js并遇到了我的第一个问题。我想使用User
属性在attributes
视图中注入属性,而不是在我的模板中编写它们:
<div id="lista"></div>
<script type="text/template" id="user-template">
<a class="btn" href="#"><i class="icon-user"></i>
<%= first %> <%= last %></a>
</script>
window.UserView = Backbone.View.extend({
attributes : { "data-route" : '/users/' + this.name },
template: _.template($('#user-template').html()),
initialize : function() {
_.bindAll(this, "render");
},
render : function() {
$(this.el).html(this.template(this.model.toJSON()));
return this;
}
});
var u = new User({ first : 'First', last : 'Last' });
var v = new UserView({ model : u, el : '#lista' });
v.render();
输出缺少data-route
属性:
<div id="lista">
<a href="#" class="btn"><i class="icon-user"></i> First Last</a>
</div>
您能否确认attributes
不适用于template
?
答案 0 :(得分:4)
template
使用作为参数传递的哈希值,在您的情况下,您可以合并this.model.toJSON()
和this.attributes
尝试
render: function() {
var data = _.extend(this.model.toJSON(), this.attributes);
this.$el.html(this.template(data));
return this;
}
答案 1 :(得分:0)
具体来自文档:
attributes
model.attributes
attributes属性是包含模型状态的内部哈希。请使用set来更新属性,而不是直接修改它们。如果您想检索并获取模型属性的副本,请使用
toJSON
代替