首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Backbone.js -如何在模板中使用自定义模型属性?

Backbone.js -如何在模板中使用自定义模型属性?
EN

Stack Overflow用户
提问于 2012-05-28 11:24:30
回答 5查看 9.9K关注 0票数 7

这可能是一个非常简单的问题,但我花了很长时间才找到答案。

使用backbone,我有这行代码:

代码语言:javascript
运行
复制
Person = Backbone.Model.extend();

然后我在一个从URL填充的集合中使用它。为了便于示例,假设我有一个名字和姓氏,并且我想这样做:

代码语言:javascript
运行
复制
Person = Backbone.Model.extend({
    FullName: this.get("firstName") + " " + this.get("lastName")
});

例如,我可以使用People.first().FullName()调用内部主干。但是,如果我将People.first()传递给我的视图并将其呈现在模板中,它似乎不知道FullName是什么。

我如何向Backbone中的模型添加自定义属性并在模板中使用该属性?

干杯!

EN

Stack Overflow用户

回答已采纳

发布于 2012-05-28 11:45:43

您的FullName定义没有任何意义,所以我将假定您是认真的:

代码语言:javascript
运行
复制
Person = Backbone.Model.extend({
    FullName: function() {
        return this.get("firstName") + " " + this.get("lastName");
    }
});

通常,您将在模型上调用toJSON来序列化它们,以供模板使用:

代码语言:javascript
运行
复制
var html = template({ person: person.toJSON() })

default toJSON只是返回模型内部属性的一个(浅)副本。这些属性可能同时具有firstNamelastName属性,但FullName是模型上的一个函数,因此它不会出现在属性中。

您可以提供自己的toJSON

代码语言:javascript
运行
复制
toJSON: function() {
    var j = _(this.attributes).clone();
    j.FullName = this.FullName();
    return j;
}

然后你的模板中就会有一个FullName。但是,toJSON还用于序列化模型以将数据发送到服务器;您的服务器最终会看到一个FullName,它可能会对此感到不安。您可以专门为模板添加另一个序列化程序:

代码语言:javascript
运行
复制
// `serialize` is another common name for this
for_template: function() {
    var j = this.toJSON();
    j.FullName = this.FullName();
    return j;
}

然后使用该函数为模板提供数据:

代码语言:javascript
运行
复制
var html = template({ person: person.for_template() });
票数 14
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10779013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档