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);
例如,在收集后移除括号()。我想他指的是一个通用用户模型,具有属性
名称和电子邮件,但一个用户模型可能会附加一个附加对象,如身份验证模型,以表示它是用户。