2015-12-01 9 views
7

Dire che ho un'azione someAction(params) che prende params che è gestito in un negozio paramsStore:Flux chiamando azioni con argomenti gestite in serbo

paramsStore.listen(function(params) { 
    someAction(params) 
}) 

Sembra che non posso chiamare questo, a mio avviso, perché a quanto pare questo va contro il modo Flux di fare le cose (le azioni non dovrebbero essere chiamate all'interno degli ascoltatori del negozio).

Il motivo per cui ho someAction all'interno del listener del negozio, è perché voglio che venga chiamato ogni volta che lo paramsStore viene modificato. Come posso ottenere questo risultato senza ricorrere al "non rispetto" delle azioni di chiamata all'interno degli ascoltatori dei negozi?

risposta

0

Anche se sono nuovo di flusso, posso offrire un suggerimento. Lo stato necessario per determinare il risultato di un'azione contenuta nel negozio A potrebbe essere collegato a un metodo get. Questo stato può essere recuperato da una vista con un getter. Quando viene chiamata l'azione, questo stato può essere inviato come parametro. Se qualcosa deve essere asincrono ora può essere fatto qui (chiamata ajax o qualcos'altro) in base a quale sia lo stato. Il risultato di questo o di un oggetto promessa può quindi essere utilizzato per attivare un'azione che viene passata al dispatcher. Il dispatcher invia il risultato o la promessa al negozio. Lo store aggiorna il suo stato e il processo si ripete se necessario (quando viene avviata l'azione iniziale).

Penso che un po 'più di dettaglio di cosa esattamente ti serve sarebbe di aiuto in realtà. Credo che l'ascolto di un'azione e l'attivazione di un'altra azione all'interno del negozio non coincida con il flusso. Penso che ci sia probabilmente un modo per ottenere il risultato che si desidera utilizzare con il flusso, ma senza ulteriori dettagli questo è il meglio che potrei inventare. Inoltre, in realtà puoi implementare tutto quello che vuoi. Il flusso è solo un modello e, per estensione, un vincolo autoimposto per aiutare la struttura.

0

Se si utilizza Flux così com'è, è possibile fare riferimento all'immagine originale dell'intera architettura allo https://github.com/facebook/flux.

Come si può vedere, non solo le viste possono creare azioni. Ci sono anche Web API Utils che potrebbero crearne uno. In generale, non solo le API API possono farlo. È totalmente okey creare azioni per iniziare un comportamento in base al mondo esterno, alcuni servizi o qualcos'altro.

Ma nel tuo caso stai provando a creare un'azione su un listener di aggiornamento del negozio. Per quanto posso capire ciò comporterebbe alcuni cambiamenti in uno o pochi altri negozi. In questo caso probabilmente non è necessario creare un'azione nel listener, ma piuttosto creare alcune relazioni tra i tuoi negozi con l'API waitFor. Ecco un link con informazioni dettagliate: http://facebook.github.io/flux/docs/todo-list.html#adding-dependency-management-to-the-dispatcher.

1

Il modo "flusso" corretto per farlo sarebbe chiamare lo someAction(params) ovunque le informazioni vengano inviate a paramsStore.

Capire cosa someAction darà più chiarezza. Ha davvero bisogno di essere un'azione? Se stai solo manipolando i dati del negozio, potresti averlo come metodo locale nel paramStore.

flux architecture

Problemi correlati