骨干关系:如何处理关系集合和模型?

时间:2012-05-23 19:40:52

标签: backbone.js backbone-relational

我有以下情况,我认为处理它的最佳方法是使用Backbone relation 如果有其他解决方案,请纠正我。

我有一个集合(1)和一个模型(2) 收集结果看起来像(3),模型结果如(4)。

最后,视图应如下所示(5)。

我的问题是:
1)可以使用Backbone relation来处理这种情况吗? 2)如果是,我应该如何重写FeedsCollection以自动获取UserModel所需的数据?


(1)

// FeedsCollection
var FeedsCollection = Backbone.Collection.extend({
    url: "http://localhost/feeds"
});

(2)

// User Model
var UserModel = Backbone.Model.extend({
    url: "http://localhost/user"
});

(3)feedsCollection结果

//feedsCollection.toJSON(); 

[
   {id:1, message: "something one", creator_id: 100},
   {id:2, message: "something two", creator_id: 101},
]

(4)userModel结果

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"},
]

1 个答案:

答案 0 :(得分:0)

您是否考虑过直接从服务器返回用户名。 所以url“/ feeds”会返回:

[
    {message: "something one", creator_id: 100, name: "jhon"},
    {message: "something two", creator_id: 101, name: "herry"},
]

如果您只想在消息附近显示用户名,这似乎是一个简单的解决方案。我不知道你的服务器的后端是什么,但我确信这可以有效地完成。

所以回答你的问题是:

  

1)可以使用Backbone关系来处理这种情况吗?

可能你可以使用插件来解决这种情况,但我不建议引入一个插件来解决这个具体的例子。对我来说,查询服务器的用户模型似乎效率低下,只是为了显示他们的名字。但是在不同情况下这可能是合适的。

无论如何,如果您决定使用插件加载用户模型或没有插件。你必须问一些问题才能弄清楚它是否值得:

  1. 这会生成多少个查询?每个用户一个可能太多了。
  2. 如果您使用一个请求加载所有用户模型,那么服务器将返回多少个用户模型?所有用户可能都很多。所以你只需要加载所需的。
  3. 服务器返回多少数据?你真的需要所有用户的属性吗?
  4. 总而言之,我仍然认为你直接从服务器返回用户的名字,只有当你需要的名称超过它的名字时才加载特定的用户模型。