微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这可能是一个非常简单的问题,但我很难找到答案.

使用骨干,我有这条线:

Person = Backbone.Model.extend();

然后我在从URL填充的集合中使用它.为了这个例子,假设我有名字和姓,我想做的事情如下:

Person = Backbone.Model.extend({
    FullName: this.get("firstName") + " " + this.get("lastName")
});

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

如何在Backbone中为模型添加自定义属性并在模板中使用?

干杯!

解决方法

你的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://www.jb51.cc/js/159607.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐