                                              (om/build* f x (-> m
                                                                 (update-in [:init-state] merge {::event-buses parent-buses})
                                                                 (merge {:descriptor descriptor})))))}))))
+
+;; ### Event triggering
+
+(defn trigger*
+  [owner event-bus-key event]
+  (let [event-bus (event-bus-key (om/get-state owner ::event-buses))]
+    (impl/trigger event-bus event))
+  nil)  ; Avoid the following React.js warning: "Returning `false` from an event handler is deprecated
+        ; and will be ignored in a future release. Instead, manually call e.stopPropagation() or e.preventDefault(),
+        ; as appropriate."
 
 ;; ### Event bus setup
 

                                         (binding [*parent* this]
                                           (super)))})]
    (when out-event-ch
      (if-let [bubbling-bus (:bubbling event-buses)]
        (impl/tap bubbling-bus out-event-ch)
        (throw (js/Error. "Bubbling event bus not available. Make sure to use root> or root<>."))))
    (om/root f value

  The arity 4 version lets you specify a channel if you also want to handle events outside of component hierarchy.

  **IMPORTANT:** If you pass a channel to receive events through, you **MUST** consume events."
  ([f value options & [out-event-ch]]
    (root* f value options out-event-ch {::bubbling (impl/event-bus (impl/bubbling-router))
                                         ::trickling (impl/event-bus (impl/trickling-router))})))

(defn root>
  "Use `root>` instead of om.core/root to add support for sending events from child components to parent components only.
