我有以下情况,我认为最好的处理方法是使用Backbone relation
。
如果有其他解决方案,请纠正我。
我有一个集合(1)和一个模型(2)。
集合结果类似于 (3),模型结果类似于 (4)。
最后,视图应如下所示 (5)。
我的问题是:
1)可以使用Backbone relation
来处理这种情况吗?
2)如果是,我应该如何重写FeedsCollection
以自动从UserModel
中获取所需的数据?
(1)
// FeedsCollection
var FeedsCollection = Backbone.Collection.extend({
url: "http://localhost/feeds"
});
(二)
// User Model
var UserModel = Backbone.Model.extend({
url: "http://localhost/user"
});
(3) 源收集结果
//feedsCollection.toJSON();
[
{id:1, message: "something one", creator_id: 100},
{id:2, message: "something two", creator_id: 101},
]
(4) 用户模型结果
userModel = new UserModel({id: 100});
userModel.fetch();
userModel.toJSON(); // {id:100, name: "jhon"}
userModel = new UserModel({id: 101});
userModel.fetch();
userModel.toJSON(); // {id:101, name: "herry"}
(5)最后的查看结果应该是这样的:
[
{message: "something one", creator_id: 100, name: "jhon"},
{message: "something two", creator_id: 101, name: "herry"},
]
您是否考虑过直接从服务器返回用户名。这样网址"/feeds"将返回:
[
{message: "something one", creator_id: 100, name: "jhon"},
{message: "something two", creator_id: 101, name: "herry"},
]
如果您只想在消息附近显示用户名,这似乎是一个简单的解决方案。我不知道你的服务器的后端是什么,但我相信这可以有效地完成。
所以回答你的问题是:
1)可以使用骨干关系来处理这种情况吗?
也许您可以使用该插件来解决这种情况,但我不建议引入插件来解决此特定示例。对我来说,向服务器查询用户模型似乎效率低下,只是为了显示它们的名称。但是,在不同的情况下,这可能是合适的。
无论如何,如果您决定使用插件加载用户模型或不使用插件。你必须问一些问题来确定它是否值得:
- 这将生成多少个查询?每个用户一个可能太多了。
- 如果您使用一个请求加载所有用户模型,服务器将返回多少个用户模型?所有用户都可能很多。因此,您只需要加载所需的。
- 服务器将返回多少数据?你真的需要所有用户的属性吗?
因此,总而言之,我仍然认为您直接从服务器返回用户名,并且仅在需要比其名称更多的时才加载特定的用户模型。