Collections 如何获取集合中具有额外属性的项

Collections 如何获取集合中具有额外属性的项,collections,backbone.js,backbone-views,Collections,Backbone.js,Backbone Views,我当前在集合中为这样的用户获取一个项目: me.user = Backbone.Collection.Users.collection().get(id); 这将返回应用程序中所需的默认属性集。在用户配置文件页面上,我想显示其他地方不需要的其他属性 如何在集合(查询服务器)中获取具有可以指定的附加属性的项 感谢因此,我认为您需要的是生成额外的模型,而不是创建两个用户模型,一个具有冗余+额外数据 一种方法是给出不同模型之间的关系 假设一个用户模型只包含一个名字和一封电子邮件。这很好,但您也希望在

我当前在集合中为这样的用户获取一个项目:

me.user = Backbone.Collection.Users.collection().get(id);
这将返回应用程序中所需的默认属性集。在用户配置文件页面上,我想显示其他地方不需要的其他属性

如何在集合(查询服务器)中获取具有可以指定的附加属性的项


感谢

因此,我认为您需要的是生成额外的模型,而不是创建两个用户模型,一个具有冗余+额外数据

一种方法是给出不同模型之间的关系

假设一个
用户
模型只包含一个名字和一封电子邮件。这很好,但您也希望在页面上呈现用户配置文件(或任何您想要的“附加内容”)。这似乎是创建一个单独的模型来表示所需的附加数据的好机会

你可以用几种方法来做。例如,如果每个用户都有一个配置文件,则可以将其烘焙到用户模型中。类似于创建用户模型时:

user.profile = new Profile();  // model
我见过一些人在模型的属性
user.set('profile',newprofile())
中放置其他模型,但我不确定这是否是个好主意。我喜欢将模型属性与该模型隔离

每个概要文件模型都有一个对应于model.id的url

因此,您可以只使用user.profile.fetch()并使用该概要文件属性来填充视图中的数据。也许它的功能类似于/user/1/profile

关于您的问题,我想您可能会提到的另一个方面是,在获取集合时,一次性从服务器发送数据。也许您的服务器会回复如下数据:

[{"name":"Jake", "email":"j@stack.com", "profile":"{"aboutme":"Some story"}"}, ... ]
配置文件数据只对拥有它的人可用。在这种情况下,您可以使用
parse()
函数提取额外的数据,并在将名称和电子邮件属性发送到model set方法之前执行一些操作

虽然,最近我认为我读到使用解析来处理额外数据是一种糟糕的形式。因此,您可能只想将其保存为名称空间,而不是解析,然后在重写的set方法中执行以下操作:

set: function(attributes, options) {

    if (!_.isUndefined(this.profile) && attributes.profile) {
        this.profile = new Profile();
        this.profile.set(attributes.profile);
    } else if (attributes.profile) {
        this.profile.set(attributes.profile);
    }

    delete attributes.profile;

    return Backbone.Model.prototype.set.call(this, attributes, options);
}
你可以为真正独特的用户做类似的事情,比如使用你的应用程序的主要用户。当我为我的应用程序实例化一个用户模型(代表用户他/她自己的模型)时,我还初始化了一些只有该用户才会有的其他特殊模型(如用于获取身份验证数据的身份验证模型等)


我不确定我是否达到了您的要求,但我希望我达到了一些要求。

集合是否已经是一个实例,我想是这样的?如果是,您只应执行以下操作:

me.user = Backbone.Collection.Users.collection.get(id);

例如,在收集后移除括号()。

我想他指的是一个通用用户模型,具有属性
名称
电子邮件
,但一个用户模型可能会附加一个附加对象,如身份验证模型,以表示它是用户。