You need to sign in to do that
Don't have an account?
SaraHasNoLimits
Can you fire an application event in a callback function?
Is it possible to fire off an application event from a callback function?
For example, could I do something like this"
createNewRace : function(component) {
var race = component.get("v.newRace");
this.insertRace(component, race, function(a) {
console.log("Race successfully saved");
var updateRace = $A.get("e.c:updateRaces");
updateRace.setParams({ "race" : race });
updateRace.fire();
});
},
insertRace : function(component, race, callback) {
var action = component.get("c.newRaceDB");
action.setParams({ "race" : race });
if (callback) {
action.setCallback(this, callback);
}
$A.enqueueAction(action);
}
For example, could I do something like this"
createNewRace : function(component) {
var race = component.get("v.newRace");
this.insertRace(component, race, function(a) {
console.log("Race successfully saved");
var updateRace = $A.get("e.c:updateRaces");
updateRace.setParams({ "race" : race });
updateRace.fire();
});
},
insertRace : function(component, race, callback) {
var action = component.get("c.newRaceDB");
action.setParams({ "race" : race });
if (callback) {
action.setCallback(this, callback);
}
$A.enqueueAction(action);
}
<aura:handler name="updateRaces" event="c:updateRaceList" action="{!c.handleUpdateRaces}" />
Once I removed that and made it look like this, everything worked like it was supposed to:
<aura:handler event="c:updateRaceList" action="{!c.handleUpdateRaces}" />
All Answers
({
doInit : function(component, event, helper) {
console.log("Calling loadOption");
helper.loadOptions(component);
},
newRace : function(component, event, helper) {
console.log("In newRace");
var race = component.get("v.newRace");
var action = component.get("c.newRaceDB");
action.setParams({ "race" : race });
action.setCallback(this, function(response) {
var state = response.getState();
if (component.isValid() && state === "SUCCESS") {
console.log("Race successfully saved");
var appEvent = $A.get("e.c:updateRaceList");
appEvent.setParams({ "race" : response.getReturnValue() });
appEvent.fire();
}
});
$A.enqueueAction(action);
}
})
And this is the NewRace component:
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes" controller="NewRaceController">
<aura:attribute name="newRace" type="Race__c"
default="{ 'sobjectType': 'Race__c',
'Name': 'New Race',
'Type__c': '',
'DateTime__c': '',
'Location': '',
'Attended__c': false,
'Results__c': ''
}"/>
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
<aura:registerEvent name="updateRaceList" type="c:updateRaceList" />
<ltng:require styles="/resource/slds/assets/styles/salesforce-lightning-design-system.min.css"/>
<div class="slds">
<div class="slds-m-around--small slds-p-top--large">
<div class="slds-form--stacked">
<h1 class="slds-text-heading--label slds-p-bottom--large"
title="Enter New Race">Enter New Race</h1>
<div class="slds-form-element">
<div class="slds-form-element__control">
<ui:inputText label="Race Name"
aura:id="Name"
class="slds-input"
labelClass="slds-form-element__label"
value="{!v.newRace.Name}"
required="true" />
</div>
</div>
<div class="slds-form-element">
<div class="slds-form-element__control">
<ui:inputSelect label="Race Type"
aura:id="Type"
class="slds-select"
labelClass="slds-form-element__label"
value="{!v.newRace.Type__c}" />
</div>
</div>
<div class="slds-form-element">
<div class="slds-form-element__control">
<ui:inputDateTime label="Date/Time"
aura:id="DateTime"
class="slds-input"
labelClass="slds-form-element__label"
displayDatePicker="true"
value="{!v.newRace.DateTime__c}" />
</div>
</div>
<div class="slds-form-element">
<div class="slds-form-element__control">
<ui:inputTextArea label="Location"
aura:id="Location"
class="slds-textarea"
labelClass="slds-form-element__label"
value="{!v.newRace.Location__c}" />
</div>
</div>
<div class="slds-form-element">
<div class="slds-form-element__control">
<ui:inputCheckbox label="Attended?"
aura:id="Attended"
class="slds-checkbox"
labelClass="slds-form-element__label"
value="{!v.newRace.Attended__c}" />
</div>
</div>
<div class="slds-form-element">
<div class="slds-form-element__control">
<ui:inputText label="Results"
aura:id="Results"
class="slds-input"
labelClass="slds-form-element__label"
value="{!v.newRace.Results__c}" />
</div>
</div>
<div class="slds-form-element">
<ui:button press="{!c.newRace}"
label="Submit"
class="slds-button slds-button--neutral" />
</div>
</div>
</div>
</div>
</aura:component>
And this is the event:
<aura:event type="APPLICATION">
<aura:attribute name="race" type="Race__c" />
</aura:event>
<aura:handler name="updateRaces" event="c:updateRaceList" action="{!c.handleUpdateRaces}" />
Once I removed that and made it look like this, everything worked like it was supposed to:
<aura:handler event="c:updateRaceList" action="{!c.handleUpdateRaces}" />