You need to sign in to do that
Don't have an account?

Trailhead Connect Components With Events Code Works But Not Passing
My code works, but I'm still getting this error and I can't figure out why. I've looked around a lot on the forums but haven't found a solution that has worked for me. Here's the error:
"Challenge Not yet complete... here's what's wrong: The campingList JavaScript controller isn't setting the 'item' as a parameter or saving the record correctly."
Here's all my code:
Camping List.cmp
CampingListController.js
CampingListHelper.js
CampingListForm.cmp
CampingListFormController.js
CampingListFormHelper.js
Thanks for your help!
"Challenge Not yet complete... here's what's wrong: The campingList JavaScript controller isn't setting the 'item' as a parameter or saving the record correctly."
Here's all my code:
Camping List.cmp
<aura:component controller="CampingListController"> <aura:attribute name="items" type="Camping_Item__c[]"/> <aura:handler name="init" action="{!c.doInit}" value="{!this}"/> <aura:handler name="addItem" event="c:addItemEvent" action="{!c.handleAddItem}"/> <c:campingListForm /> <div class="slds-card slds-p-top--medium"> <header class="slds-card__header"> <h3 class="slds-text-heading--small">Camping Items</h3> </header> <section class="slds-card__body"> <div id="list" class="row"> <aura:iteration items="{!v.items}" var="item"> <c:campingListItem item="{!item}"/> </aura:iteration> </div> </section> </div> </aura:component>
CampingListController.js
({ handleAddItem: function(component, event, helper) { var newItem = event.getParam("item"); helper.createItem(component, newItem); }, doInit: function(component, event, helper) { // Create the action var action = component.get("c.getItems"); // Add callback behavior for when response is received action.setCallback(this, function(response) { var state = response.getState(); if (component.isValid() && state === "SUCCESS") { component.set("v.items", response.getReturnValue()); } else { console.log("Failed with state: " + state); } }); // Send action off to be executed $A.enqueueAction(action); } })
CampingListHelper.js
({ createItem: function(component, item) { this.saveItem(component, item, function(response){ var state = response.getState(); if (component.isValid() && state === "SUCCESS") { var items = component.get("v.items"); items.push(response.getReturnValue()); component.set("v.items", items); } }); }, updateItem: function(component, item) { this.saveItem(component, item); }, saveItem: function(component, item, callback) { var action = component.get("c.saveItem"); console.log("Name of item to save: " + item.Name); action.setParams({ "item": item }); if (callback) { action.setCallback(this, callback); } console.log(action.getParam("item")); $A.enqueueAction(action); } })
CampingListForm.cmp
<aura:component > <aura:registerEvent name="addItem" type="c:addItemEvent"/> <aura:attribute name="newItem" type="Camping_Item__c" default="{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }"/> <form class="slds-form--stacked"> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputText aura:id="itemName" label="Camping Item Name" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Name}" required="true"/> </div> </div> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputNumber aura:id="quantity" label="Quantity" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Quantity__c}" required="true"/> </div> </div> <div class="slds-form-element"> <div class="slds-form-element__control"> <ui:inputCurrency aura:id="price" label="Price" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Price__c}" /> </div> </div> <div class="slds-form-element"> <ui:inputCheckbox aura:id="packed" label="Packed?" class="slds-checkbox" labelClass="slds-form-element__label" value="{!v.newItem.Packed__c}"/> </div> <div class="slds-form-element"> <ui:button label="Create Camping Item" class="slds-button slds-button--brand" press="{!c.clickCreateItem}"/> </div> </form> </aura:component>
CampingListFormController.js
({ clickCreateItem: function(component, event, helper) { if(helper.validateCampingListForm(component)){ var newItem = component.get("v.newItem"); helper.createItem(component, newItem); } } })
CampingListFormHelper.js
({ createItem: function(component, newItem) { var createEvent = component.getEvent("addItem"); createEvent.setParams({ "item": newItem }); createEvent.fire(); component.set("v.newItem", {'sobjectType' : 'Camping_Item__c', 'Name' : '', 'Quantity__c' : 0, 'Price__c' : 0, 'Packed__c' : false}); }, validateCampingListForm: function(component) { // Simplistic error checking var validItem = true; // Name must not be blank var nameField = component.find("itemName"); var name = nameField.get("v.value"); console.log("Name: " + name); if ($A.util.isEmpty(name)){ validItem = false; nameField.set("v.errors", [{message:"Expense name can't be blank."}]); } else { nameField.set("v.errors", null); } // Amount must be set, must be a positive number var quantityField = component.find("quantity"); var quantity = quantityField.get("v.value"); console.log("quantity: " + quantity); if ($A.util.isEmpty(quantity) || isNaN(quantity) || (quantity <= 0.0)){ validItem = false; quantityField.set("v.errors", [{message:"Enter an quantity amount."}]); } else { // If the amount looks good, unset any errors... quantityField.set("v.errors", null); } var priceField = component.find("price"); var price = priceField.get("v.value"); console.log("price: " + price); if ($A.util.isEmpty(price) || isNaN(price) || (price <= 0.0)){ validItem = false; priceField.set("v.errors", [{message:"Enter an price amount."}]); } else { // If the amount looks good, unset any errors... priceField.set("v.errors", null); } return(validItem); } })
Thanks for your help!
All Answers
We made some updates yesterday so give this a try again. Pleaes LMK how it works out for you.
Jeff Douglas
Trailhead Developer Advocate
Hi Jeff, I am also getting same error with my code. So I've copied the above code and made changes to "submitForm" button. But of no use. Please help.
Regards
Nagesh M