【问题标题】:Backbone relation: how to put in relation collection and model?骨干关系:如何放入关系集合和模型?
【发布时间】:2012-05-30 09:38:05
【问题描述】:

我有以下情况,我认为最好的处理方法是使用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 = 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"},
]

【问题讨论】:

  • 是否 (2) 是 var UserModel = Backbone.Model.extend({}) 而不是 FeedsCollection?我对 FeedsCollection 与 UserModel 的关系感到困惑?它们是否基于属性 creator_id 相关?
  • @TyroneMichael,感谢您的评论,我确实更正了 (2),是的,它们与 creator_id 相关。 feedsCollection.creator_id = userModel.id
  • 这是一对多吗?多对一关系还是多对多关系? (例如,用户可以有多个提要,提要可以有多个用户吗?)

标签: backbone.js backbone-relational


【解决方案1】:

您是否考虑过直接从服务器返回用户名。 这样 url "/feeds" 就会返回:

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

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

所以回答你的问题:

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

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

无论如何,如果您决定加载带有插件或不带插件的用户模型。您必须提出一些问题才能确定它是否值得:

  1. 这会产生多少查询?每个用户一个可能太多了。
  2. 如果您使用一个请求加载所有用户模型,服务器将返回多少个用户模型?所有用户可能都太多了。所以你只需要加载需要的。
  3. 服务器将返回多少数据?您真的需要所有用户的属性吗?

因此,总而言之,我仍然认为您直接从服务器返回用户的名称,并且仅在您需要的不仅仅是名称时才加载特定的用户模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多