问题 Backbone.js中的模型


我有一个关于处理我的模型的问题。我很困惑。当我加载页面时,我从包含“事件”的rails获取一个JSON字符串,这些事件依次有一个用户,多个参与者,多个付款和多个评论,这些评论又有一个用户,付款有多个用户和一个单个用户。评论和付款也有一个指向父母的事件。

Events
  User
  Participants(users)
  Payments
    User
    Users
    Event
  Comments
    User
    Event

好吧,问题是:我应该把所有东西都加载成树,到处都有完整的属性:

"events": {
  "id": "event_1",
  "user": {
    "id": "user_1", "name":"name"
  }, "participants": [
    {"id": "user_1", "name":"name"},
    {"id": "user_2", "name":"name"}
  ], "payments": [{
      "id":"payment_1",
      "user": {
        "id": "user_1", "name":"name"
      },"users": [
        {"id": "user_1", "name":"name"},
        {"id": "user_2", "name":"name"}
      ], "event": {root event object}  
    }], "comments": [{
      "id": "comment_1",
      "user": {
        "id": "user_1", "name":"name"
      }, "event": {root event object}  
    }]
  }
}

然后有事件模型,创建新的评论,付款和用户,并将其分配给它自己的事件,或者将每个事件,用户付款和评论加载到单独的变量,然后使用变量获取更好的主意模特。 这很难解释,所以请随意问我是否需要澄清一些事情。

结论:我应该让事件模型处理所有嵌套对象的创建,还是有更好的方法来处理它,并且可以更全面地访问模型?


7138
2018-01-20 19:54


起源

你可能想要考虑使用 骨干关系 并有一个用户,参与者,事件等模型......以类似的方式对待它们,你可能已经在ruby-on-rails上做了 - T I


答案:


建筑是主观的,但这是我将如何去做 -

3个基本型号

User = Backbone.Model.extend({
    defaults : {
        name : ""
    }
})
Payment = Backbone.Model.extend({
    defaults : {
        user : new User(),
        users : new UserList(),
        event : ""
    }
})
Comment = Backbone.Model.extend({
    defaults : {
        user : new User(),
        event : ""
    }
})

3收藏

UserList = Backbone.Collection.extend({
    model : User
})
PaymentList = Backbone.Collection.extend({
    model : Payment
})
CommentList = Backbone.Collection.extend({
    model : Comment
})

一个事件模型

Event = Backbone.Model.extend({
    defaults : {
        user : new User(),
        participants : new UserList(),
        payments : new PaymentList(),
        comments : new CommentList()
    }
})

如果在上面的示例中使用JSON初始化事件对象,它应该可以正常工作。将来,如果您想将用户分离到不同的API,此代码也应该支持。如果你想在以后全局使组件对象可用,你可以从用户对象中获取它,即window.User = myEvent.get(“user”)

希望这可以帮助 :)


9
2018-01-25 00:30





我不会。我会通过对象特定的调用尽可能简单地保持rails侧。是的,它确实意味着您将进行更多调用以获得全面的图片,但最终它将更容易维护,并且对一个对象的更改不需要在其他对象中进行级联更改。例如,如果在名称之上需要添加其他用户属性,该怎么办?

换句话说,Eve​​nt就是一个事件对象。它通过id引用其他对象。这些对象中的每一个都有自己的模型类和相应的API URL。因此,如果需要(通过id),您需要从API获取用户对象。


3
2018-01-24 23:10