因此,按照评论,我认为您想要的是生成额外的模型,而不是创建两个用户模型,一个具有冗余 + 额外数据。
您可以这样做的一种方法是给出不同模型之间的关系。
假设user 模型仅包含姓名和电子邮件。这很好,但您还想在页面上呈现用户配置文件(或任何您想要的“额外”)。这似乎是创建一个代表您想要的额外数据的单独模型的好机会。
您可以通过几种方式做到这一点。例如,如果每个用户都有一个配置文件,您可以将其烘焙到您的用户模型中。类似于创建用户模型时:
user.profile = new Profile(); // model
我看到有些人将其他模型放入模型的属性user.set('profile', new Profile()),但我不确定这是否是个好主意。我喜欢将我的模型属性与该模型隔离。
每个配置文件模型都有一个对应于 model.id 的 url。
那么您可以只使用 user.profile.fetch() 并使用该配置文件属性来填充视图中的数据。也许它会像 /user/1/profile
我认为您可能会提到的关于您的问题的另一个方面是在您获取集合时一次性从服务器发送数据。也许您的服务器会回复这样的数据:
[{"name":"Jake", "email":"j@stack.com", "profile":"{"aboutme":"Some story"}"}, ... ]
并且配置文件数据仅适用于拥有它的人等。在这种情况下,您可以使用parse() 函数提取额外数据并在将名称和电子邮件属性发送到模型设置方法。
虽然,最近我认为我读到使用解析来处理额外数据是不好的形式。 Override 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);
}
您可以为真正独特的用户(例如使用您的应用的主要用户)执行类似的操作。当我为我的应用实例化一个用户模型(代表用户他/她自己的那个)时,我还初始化了一些其他只有用户才会拥有的特殊模型(例如用于获取身份验证数据的身份验证模型等)
我不确定我是否击中了你的要求,但我希望我击中了一些东西。