2017-10-09 11 views
1

J'ai suivi cet exemple: https://github.com/Day8/re-frame/blob/master/docs/FAQs/PollADatabaseEvery60.mdComment envoyer un événement d'un événement dans le nouveau cadre

Et voici mon gestionnaire intervalle

(defonce interval-handler 
    (fn [{:keys [action id frequency event]}] 
    (let [live-intervals (atom {})] 
     (condp = action 
     :start (swap! live-intervals assoc id (js/setInterval #(re-frame/dispatch event) frequency)) 
     :end (do (js/clearInterval (get live-intervals id)) 
       (swap! live-intervals dissoc id)))))) 

(re-frame/reg-fx 
    :interval 
    interval-handler) 

Je suis en train de distribuer cet événement intervalle d'un autre événement ici:

(re-frame/reg-event-db 
    :start-playing 
    (fn [db _] 
    (re-frame/dispatch [:interval {:action :start 
         :id :some-awesome-id 
         :frequency 1000 
         :event [:tick]}]) 
    (assoc db :is-playing? true 
      :fake (random-active-color db) 
      :real (random-active-color db)))) 

mais il dit re-frame: no :event handler registered for: :interval

N'est-ce pas possible?

Répondre

2

est un effet, pas un événement. Pour appeler un effet, vous devez inclure comme une clé dans les effets carte retournée par votre gestionnaire d'événements - ne pas émettre un autre événement avec la clé de l'effet:

(re-frame/reg-event-fx 
    :start-playing 
    (fn [{:keys [db]} _] 
    {:interval {:action :start 
       :id :some-awesome-id 
       :event [:tick]}] 
    :db (assoc db :is-playing? true 
        :fake (random-active-color db) 
        :real (random-active-color db))})) 

Au-dessus de gestionnaire d'événements retourne une carte décrivant deux effets:

  • :db - mise à jour de l'application db à une nouvelle valeur (à condition que la valeur :db)

  • - re-cadre appellera votre gestionnaire d'effet (interval-handler) avec la valeur de entrée dans la carte des effets

+0

Vous avez raté 'db' comme premier argument à' assoc'. Il ne me laissera pas éditer parce que le changement est trop petit ... – madstap

+0

Correction - merci @madstap pour l'avoir attrapé! –