这可能是一个非常简单的问题,但我花了很长时间才找到答案。
使用backbone,我有这行代码:
Person = Backbone.Model.extend();然后我在一个从URL填充的集合中使用它。为了便于示例,假设我有一个名字和姓氏,并且我想这样做:
Person = Backbone.Model.extend({
FullName: this.get("firstName") + " " + this.get("lastName")
});例如,我可以使用People.first().FullName()调用内部主干。但是,如果我将People.first()传递给我的视图并将其呈现在模板中,它似乎不知道FullName是什么。
我如何向Backbone中的模型添加自定义属性并在模板中使用该属性?
干杯!
发布于 2012-05-28 11:45:43
您的FullName定义没有任何意义,所以我将假定您是认真的:
Person = Backbone.Model.extend({
FullName: function() {
return this.get("firstName") + " " + this.get("lastName");
}
});通常,您将在模型上调用toJSON来序列化它们,以供模板使用:
var html = template({ person: person.toJSON() })default toJSON只是返回模型内部属性的一个(浅)副本。这些属性可能同时具有firstName和lastName属性,但FullName是模型上的一个函数,因此它不会出现在属性中。
您可以提供自己的toJSON
toJSON: function() {
var j = _(this.attributes).clone();
j.FullName = this.FullName();
return j;
}然后你的模板中就会有一个FullName。但是,toJSON还用于序列化模型以将数据发送到服务器;您的服务器最终会看到一个FullName,它可能会对此感到不安。您可以专门为模板添加另一个序列化程序:
// `serialize` is another common name for this
for_template: function() {
var j = this.toJSON();
j.FullName = this.FullName();
return j;
}然后使用该函数为模板提供数据:
var html = template({ person: person.for_template() });https://stackoverflow.com/questions/10779013
复制相似问题