Backbone.js在使用模板时无法合并属性?

时间:2012-03-05 12:15:22

标签: backbone.js underscore.js

我刚刚开始学习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

2 个答案:

答案 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代替