2012-01-20 41 views
11

Tôi có câu hỏi về việc xử lý các mô hình của mình. Tôi hoàn toàn bối rối. Khi tôi tải trang, tôi nhận được chuỗi JSON từ đường ray chứa "sự kiện", những sự kiện này lần lượt có một người dùng, nhiều người tham gia, nhiều thanh toán và nhiều nhận xét, những nhận xét này, lần lượt có một người dùng và thanh toán có nhiều người dùng và một người dùng. Các ý kiến ​​và thanh toán cũng có một sự kiện chỉ trở lại att the parent.Mô hình trong Backbone.js

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

Okey, vì vậy câu hỏi là: Tôi có nên nạp tất cả mọi thứ như một cái cây, với các thuộc tính đầy đủ ở khắp mọi nơi:

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

Và sau đó có mô hình các sự kiện, để tạo mới nhận, thanh toán và người sử dụng, và gán nó cho sự kiện riêng của nó, hoặc là một ý tưởng tốt hơn để tải mọi sự kiện, thanh toán người dùng và nhận xét vào các biến riêng biệt, và sau đó sử dụng biến để lấy các mô hình. Rất khó giải thích, vì vậy hãy tự hỏi nếu tôi cần làm rõ điều gì đó.

Kết luận: Tôi có nên để mô hình sự kiện xử lý việc tạo tất cả các đối tượng lồng nhau hoặc có cách nào tốt hơn để xử lý điều này và có quyền truy cập vào các mô hình toàn cầu hơn không?

+3

bạn có thể muốn xem xét việc sử dụng [xương sống-quan hệ] (https://github.com/PaulUithol/Backbone-relational) và có một mô hình cho người dùng, người tham gia, sự kiện, v.v ... đối xử với họ theo cách tương tự có thể bạn đã làm trong ruby-on-ray –

Trả lời

9

Kiến trúc là chủ quan, nhưng ở đây là làm thế nào tôi sẽ đi về nó -

3 mô hình cơ sở

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 Bộ sưu tập

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

Một mô hình tổ chức sự kiện

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

Nếu bạn khởi tạo đối tượng sự kiện của mình bằng JSON trong ví dụ trên, nó chỉ hoạt động. Trong tương lai, nếu bạn muốn tách riêng người dùng của mình thành một API khác, mã này cũng nên hỗ trợ điều đó. Nếu bạn muốn làm cho các thành phần đối tượng có sẵn trên toàn cầu sau này, bạn chỉ có thể lấy nó từ đối tượng người dùng, ví dụ, window.User = myEvent.get ("user")

Hope this helps :)

3

Tôi sẽ không làm như vậy. Tôi sẽ giữ cho bên đường ray càng đơn giản càng tốt với các cuộc gọi cụ thể đối tượng. Vâng, nó có nghĩa là bạn sẽ thực hiện nhiều cuộc gọi hơn để có được bức tranh đầy đủ nhưng cuối cùng nó sẽ dễ dàng hơn để duy trì và thay đổi một đối tượng sẽ không yêu cầu thay đổi tầng trong một loạt những người khác. Ví dụ: nếu trên đầu tên bạn cần thêm thuộc tính người dùng khác thì sao?

Nói cách khác, Sự kiện chỉ là, một đối tượng sự kiện. Nó đề cập đến các đối tượng khác bằng id. Mỗi một đối tượng trong số đó có các lớp mô hình riêng và các url API tương ứng. Vì vậy, bạn sẽ cần phải nhận đối tượng người dùng từ API nếu và khi cần (theo id).

Các vấn đề liên quan