Sto costruendo un selettore a tre vie: aziende, dipartimenti e utenti.Come utilizzare correttamente gli eventi in Backbone
Sto cercando di capire il modo migliore per strutturare questo nella mia Backbone app. Ecco il problema attuale che sto avendo.
Supponiamo che un utente abbia selezionato un'azienda. Poi, i servizi e le collezioni degli utenti saranno popolati e la vista si aggiorna:
L'utente può quindi selezionare un reparto dalla lista, che sarà ulteriormente perfezionare l'utente di selezione. Questo ho funzionato bene.
Oppure, l'utente può passare direttamente all'elenco degli utenti e trovare un utente (senza dover prima specificare un reparto). In questo caso, è necessario aggiornare la vista per entrambi i reparti e gli utenti:
- Il reparto deve essere selezionato nel reparto utente.
- Gli utenti devono perfezionare tutti gli utenti nel reparto utente selezionato, anziché tutti gli utenti nella società selezionata.
Sto lottando con il modo migliore per farlo. Finora, le mie collezioni departments
e users
hanno una proprietà selected
, quindi è così che sto mantenendo lo stato. Attualmente sto facendo qualcosa di simile
- Quando l'utente seleziona un reparto, la vista reparto
- imposta il reparto selezionato direttamente sulla raccolta
departments
Attiva un evento- La collezione utenti sente l'evento, cancella qualsiasi utente selezionato e attiva un altro evento
- La vista utenti ascolta l'evento e esegue nuovamente il rendering. Dal momento che conosce la raccolta dipartimenti, si sa è stato selezionato un reparto e che dovrebbe perfezionare gli utenti verso il reparto
Lo faccio perché se ho avuto la vista attivare solo l'evento (senza impostando innanzitutto la proprietà selezionata dei reparti), avrei una condizione di gara: sia i reparti che le raccolte di utenti risponderanno all'evento e, a seconda del momento, gli utenti potrebbero non essere adeguatamente rifiniti.
Il secondo pezzo:
- Quando l'utente seleziona un utente (senza specificare un dipartimento), vista utente
- imposta l'utente selezionato direttamente sulla raccolta
users
- Imposta il selezionato dipartimento direttamente sulla collezione
departments
(di cui è a conoscenza) - Trigger un evento
- imposta l'utente selezionato direttamente sulla raccolta
e questo è dove sono bloccato. La raccolta dipartimenti non ha realmente bisogno di fare nulla, dal momento che la sua proprietà selezionata è già corretta; davvero, la sua vista ha solo bisogno di ri-renderizzare. E così fa la vista degli utenti.
Ma questo non è tutto, perché ci sono molte altre cose che possono accadere. Sento che sta andando fuori controllo.
- Qual è il migliore per strutturare questo?
- Sto usando gli eventi correttamente?
- Come gestite una vista che deve essere ascoltata su altre viste e altre collezioni che cambiano?
Aggiornamento: Devo solo utilizzare percorsi per salvare lo stato di applicazione? Questo può semplificare le cose ...
Aggiornamento 2:This question è stato utile per me. Avere un modello separato per gestire lo stato sembra decisamente la strada da percorrere.
Update 3: Avere un modello separato per memorizzare lo stato + l'uso di jQuery deferreds è incredibile. Sul serio. Mi completa.
Mi piace - ci provo e torno da te! –
Usi eventi per comunicare da view-> state e state-> collezioni e back? O dai riferimenti allo stato a tutto e chiama semplicemente le funzioni direttamente? O qualche combinazione? –
Sembra che le viste debbano avere riferimenti diretti allo stato in modo che possano usare le sue proprietà durante il rendering. Essere d'accordo? –