2012-01-20 11 views
11

Ho una domanda sulla gestione dei miei modelli. Mi sento tutto confuso. Quando carico la pagina, ricevo una stringa JSON dai binari che contengono "eventi", questi eventi hanno a loro volta un utente, più partecipanti, più pagamenti e più commenti, questi commenti hanno un utente a turno e i pagamenti hanno più utenti e un singolo utente. Anche i commenti e i pagamenti hanno un evento che fa riferimento al genitore.Modelli in Backbone.js

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

Okey, quindi la domanda è: Devo caricare tutto come un albero, con gli attributi pieni ovunque:

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

e quindi avere il modello di eventi, per creare nuovi commenti, i pagamenti e gli utenti, e assegnarlo al proprio evento o è un'idea migliore caricare tutti gli eventi, i pagamenti degli utenti e i commenti in variabili separate e quindi utilizzare la variabile per ottenere i modelli. È abbastanza difficile da spiegare, quindi sentitevi liberi di chiedere se ho bisogno di chiarire qualcosa.

Conclusione: dovrei lasciare che il modello di evento gestisca la creazione di tutti gli oggetti nidificati, o c'è un modo migliore per gestirlo e avere accesso ai modelli più globali?

+3

potresti voler usare [backbone-relational] (https://github.com/PaulUithol/Backbone-relational) e avere un modello per utenti, partecipanti, eventi ecc ... trattandoli in un modo simile potresti già fare in ruby-on-rails –

risposta

9

Architettura è soggettiva, ma qui è come vorrei andare a questo proposito -

3 modelli base

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 Collezioni

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

Un modello di evento

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

Se si inizializza l'oggetto evento con JSON nell'esempio precedente, dovrebbe funzionare. In futuro, se vuoi separare i tuoi utenti da un'API diversa, questo codice dovrebbe supportare anche questo. Se si vuole rendere gli oggetti a disposizione la componente a livello globale in seguito, si può solo ottenere da l'oggetto utente, cioè, window.User = myEvent.get ("utente")

Spero che questo aiuti :)

3

Non lo farei. Vorrei mantenere il lato delle rotaie il più semplice possibile con le chiamate a oggetti specifici. Sì, vuol dire che farai più chiamate per ottenere l'immagine completa, ma alla fine sarà più semplice mantenere e le modifiche a un oggetto non richiederanno cambiamenti a cascata in un gruppo di altre. Ad esempio, cosa succede se sopra il nome è necessario aggiungere altri attributi utente?

In altre parole, Event è proprio questo, un oggetto evento. Si riferisce ad altri oggetti con id. Ognuno di questi oggetti ha le proprie classi di modelli e gli stessi URL API. Quindi dovresti quindi ottenere l'oggetto utente dall'API se e quando è necessario (dall'ID).

Problemi correlati