So, the short answer is dynamic components do not automatically bubble events up to their parents. The good news is you can manually create the binding between the registered event (in the child) and the parent's controller method.
See SFDC's brief documentation on the subject.
Hopefully this example can help explain how to use addHandler
Let us assume Component_1.cmp has the following handler:
<aura:handler name="Cmp_1_ChildCmp_1_Evt" event="c:myCustomCmpEvt" action="{!c.handleChild}"/>
And Component_1_ChildComponent_1.cmp has the following registered event
<aura:registerEvent name="Cmp_1_ChildCmp_1_Evt" type="c:myCustomCmpEvt"/>
During the creation of Component_1_ChildComponent_1 (during the $A.createComponent
's callback), you will need to assign the parent's controller's method to the child component's registered event. It will look something similar to this:
childCreater : function(component, event, helper){
var attrs; // your child's attributes
$A.createComponent("c:Component_1_ChildComponent_1", attrs, function(newCmp, status, statusMsg){
newCmp.addHandler("Cmp_1_ChildCmp_1_Evt", component, "c.handleChild");
// The second and third argument is what tells the child to call this
// component's handleChild(...) function
});
},
handleChild : function(component, event, helper) {
// your component event handler
}
I hope this helps.
The issue here is for Application events as mentioned in the docs the handler syntax is not to have name attribute
Modify your handler as below
<aura:handler event="c:updateRaceList" action="{!c.handleUpdateRaces}" />
Best Answer
During the event bubble phase, use event.stopPropagation() to cause the component's root to be become the root node for the default phase. This means you'll need a handler at the top-level component to halt propagation beyond that component. See Application Event Propagation. It'll stop processing with the component that fired the event.