2013-05-22 12 views
5

Sto costruendo un selettore a tre vie: aziende, dipartimenti e utenti.Come utilizzare correttamente gli eventi in Backbone

enter image description here

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:

enter image description here

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:

  1. Il reparto deve essere selezionato nel reparto utente.
  2. 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
    1. imposta il reparto selezionato direttamente sulla raccolta
    2. departments Attiva un evento
    3. La collezione utenti sente l'evento, cancella qualsiasi utente selezionato e attiva un altro evento
    4. 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
    1. imposta l'utente selezionato direttamente sulla raccolta users
    2. Imposta il selezionato dipartimento direttamente sulla collezione departments (di cui è a conoscenza)
    3. Trigger un evento

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.

risposta

2

Trovo utile utilizzare un modello per tenere traccia dello stato. In questo modo puoi passare quel modello a diverse viste e non avere viste che si riferiscono direttamente l'un l'altro.

È possibile utilizzare eventi incorporati e personalizzati sul modello di stato per gestire le transizioni di stato.

Nel tuo caso le raccolte non devono memorizzare selected. Invece selectedUser e selectedDepartment potrebbero essere attributi del modello di stato. Quindi potresti avere una logica nel tuo modello che attiva eventi personalizzati ('aggiorna: utenti: visualizza' o 'aggiorna: reparti: visualizza') a seconda di cosa è selezionato.

Spero che abbia senso.

+0

Mi piace - ci provo e torno da te! –

+0

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? –

+0

Sembra che le viste debbano avere riferimenti diretti allo stato in modo che possano usare le sue proprietà durante il rendering. Essere d'accordo? –

Problemi correlati