Модели в Backbone.js - PullRequest
       2

Модели в Backbone.js

11 голосов
/ 20 января 2012

У меня вопрос по поводу работы с моими моделями. Я запутался. Когда я загружаю страницу, я получаю строку 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}  
    }]
  }
}

А затем имейте модель событий, чтобы создавать новые комментарии, платежи и пользователей, и назначать ее для своего собственного события, или лучше загрузить каждое событие, пользовательский платеж и комментарий в отдельные переменные, а затем использовать переменная, чтобы получить модели. Это довольно сложно объяснить, поэтому не стесняйтесь спрашивать, нужно ли мне что-то разъяснять.

Заключение: Должен ли я позволить модели событий обрабатывать создание всех вложенных объектов, или есть какой-то лучший способ справиться с этим и иметь доступ к моделям более глобально?

Ответы [ 2 ]

9 голосов
/ 25 января 2012

Архитектура субъективна, но вот как я бы это сделал -

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")

Надеюсь, это поможет:)

3 голосов
/ 25 января 2012

Я бы не стал. Я бы держал сторону рельсов как можно более простой, используя вызовы конкретных объектов Да, это означает, что вы будете делать больше звонков, чтобы получить полную картину, но в конечном итоге это будет легче поддерживать, и изменения в одном объекте не потребуют каскадных изменений в группе других. Например, что, если в верхней части имени вам нужно добавить другие атрибуты пользователя?

Другими словами, Событие - это просто объект события. Это относится к другим объектам по id. Каждый из этих объектов имеет свои собственные классы моделей и соответствующие URL-адреса API. Таким образом, вам необходимо получить объект пользователя из API, если и когда это необходимо (по идентификатору).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...