You need to sign in to do that
Don't have an account?
Peter McGavin
The campingList component isn't iterating the array of 'items' and creating 'campingListItem' components.
Hi,
I have managed to get the challenge working but the trailhaed keeps displaying the following message when I press the Check challgene button:
The campingList component isn't iterating the array of 'items' and creating 'campingListItem' components.
It could possibly be the way I have written the code (as separate components) compared to what the trailhead is expecting:
Here is my code:
a) harnessApp.app
<aura:application extends="force:slds">
<c:campingHeader />
<c:campingList />
</aura:application>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
b) campingHeader.cmp
<aura:component >
<!--<h1>Camping List</h1>-->
<!-- PAGE HEADER -->
<lightning:layout class="slds-page-header slds-page-header--object-home">
<lightning:layoutItem >
<lightning:icon iconName="action:goal" alternativeText="Camping List"/>
</lightning:layoutItem>
<lightning:layoutItem padding="horizontal-small">
<div class="page-section page-header">
<h1 class="slds-text-heading--label">Camping Item</h1>
<h2 class="slds-text-heading--medium">My Camping Items</h2>
</div>
</lightning:layoutItem>
</lightning:layout>
<!-- / PAGE HEADER -->
</aura:component>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
c) campingList.cmp
<aura:component >
<aura:attribute name="items" type="Camping_Item__c[]"/>
<aura:attribute name="newItem" type="Camping_Item__c"
default="{ 'sobjectType': 'Camping_Item__c',
'Name': '',
'Packed__c': '',
'Price__c': '0',
'Quantity__c': '0' }"/>
<!-- NEW CAMPING ITEM FORM -->
<lightning:layout >
<lightning:layoutItem padding="around-small" size="6">
<!-- CREATE NEW CAMPING ITEM -->
<div aria-labelledby="newcampingitemform">
<!-- BOXED AREA -->
<fieldset class="slds-box slds-theme--default slds-container--small">
<legend id="newcampingitemform" class="slds-text-heading--small
slds-p-vertical--medium">
Add Camping Item
</legend>
<!-- CREATE NEW CAMPING ITEM FORM -->
<form class="slds-form--stacked">
<lightning:input aura:id="campingitemform" label="Item Name"
name="campingitemname"
value="{!v.newItem.Name}"
required="true"/>
<lightning:input type="number" aura:id="campingitemform" label="Quantity"
name="campingitemquantity"
min="1"
value="{!v.newItem.Quantity__c}"
messageWhenRangeUnderflow="Enter at least 1"/>
<lightning:input type="number" aura:id="campingitemform" label="Price"
name="campingitemprice"
formatter="currency"
step="0.01"
value="{!v.newItem.Price__c}" />
<lightning:input type="checkbox" aura:id="campingitemform" label="Packed?"
name="campingitempacked"
checked="{!v.newItem.Packed__c}"/>
<lightning:button label="Create Item"
class="slds-m-top--medium"
variant="brand"
onclick="{!c.clickCreateItem}"/>
</form>
<!-- / CREATE NEW CAMPING ITEM FORM -->
</fieldset>
<!-- / BOXED AREA -->
</div>
<!-- / CREATE CAMPING NEW ITEM -->
</lightning:layoutItem>
</lightning:layout>
<!-- / NEW CAMPING ITEM FORM -->
<c:campingListItem items="{!v.items}"/>
</aura:component>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
d) campingListController.js
({
clickCreateItem: function(component, event, helper) {
var validItem = component.find('campingitemform').reduce(function (validSoFar, inputCmp) {
// Displays error messages for invalid fields
inputCmp.showHelpMessageIfInvalid();
return validSoFar && inputCmp.get('v.validity').valid;
}, true);
// If we pass error checking, do some real work
if(validItem){
// Create the new expense
var newItem = component.get("v.newItem");
console.log("Create item: " + JSON.stringify(newItem));
helper.createItem(component, newItem);
}
}
})
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
e) campingListHelper.js
({createItem: function(component, item) {
var theItem = component.get("v.items");
// Copy the expense to a new object
// THIS IS A DISGUSTING, TEMPORARY HACK
var newItem = JSON.parse(JSON.stringify(item));
console.log("Item before 'create': " + JSON.stringify(theItem));
theItem.push(newItem);
component.set("v.items", theItem);
console.log("Item after 'create': " + JSON.stringify(theItem));
component.set("v.newItem",{ 'sobjectType': 'Camping_Item__c',
'Name': '',
'Quantity__c': 0,
'Price__c': 0,
'Packed__c': false });
}
})
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
f) campingListItem.cmp
<aura:component >
<aura:attribute name="items" type="Camping_Item__c[]"/>
<lightning:card title="Items">
<p class="slds-p-horizontal--small">
<aura:iteration items="{!v.items}" var="item">
<c:campingListItems item="{!item}"/>
</aura:iteration>
</p>
</lightning:card>
</aura:component>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
g) campingListItems.cmp
<aura:component >
<aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
<!--aura:attribute name="formatdate" type="Date"/-->
<aura:attribute name="item" type="Camping_Item__c"/>
<lightning:card title="{!v.item.Name}" iconName="standard:scan_card"
class="{!v.item.Packed__c ?
'slds-theme--success' : ''}">
<aura:set attribute="footer">
<!--p>Date: <lightning:formattedDateTime value="{!v.formatdate}"/></p-->
<!--p class="slds-text-title"><lightning:relativeDateTime value="{!v.formatdate}"/></p-->
</aura:set>
<p class="slds-p-horizontal--small">
Quantity: {!v.item.Quantity__c}
</p>
<p class="slds-text-heading--medium slds-p-horizontal--small">
Price: <lightning:formattedNumber value="{!v.item.Price__c}" style="currency"/>
</p>
<p>
<lightning:input type="toggle"
label="Packed?"
name="packed"
class="slds-p-around--small"
checked="{!v.item.Packed__c}"
messageToggleActive="Yes"
messageToggleInactive="No"
onchange="{!c.clickPacked}"/>
</p>
</lightning:card>
</aura:component>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Thanks in advance for your assistance on this.
I have managed to get the challenge working but the trailhaed keeps displaying the following message when I press the Check challgene button:
The campingList component isn't iterating the array of 'items' and creating 'campingListItem' components.
It could possibly be the way I have written the code (as separate components) compared to what the trailhead is expecting:
Here is my code:
a) harnessApp.app
<aura:application extends="force:slds">
<c:campingHeader />
<c:campingList />
</aura:application>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
b) campingHeader.cmp
<aura:component >
<!--<h1>Camping List</h1>-->
<!-- PAGE HEADER -->
<lightning:layout class="slds-page-header slds-page-header--object-home">
<lightning:layoutItem >
<lightning:icon iconName="action:goal" alternativeText="Camping List"/>
</lightning:layoutItem>
<lightning:layoutItem padding="horizontal-small">
<div class="page-section page-header">
<h1 class="slds-text-heading--label">Camping Item</h1>
<h2 class="slds-text-heading--medium">My Camping Items</h2>
</div>
</lightning:layoutItem>
</lightning:layout>
<!-- / PAGE HEADER -->
</aura:component>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
c) campingList.cmp
<aura:component >
<aura:attribute name="items" type="Camping_Item__c[]"/>
<aura:attribute name="newItem" type="Camping_Item__c"
default="{ 'sobjectType': 'Camping_Item__c',
'Name': '',
'Packed__c': '',
'Price__c': '0',
'Quantity__c': '0' }"/>
<!-- NEW CAMPING ITEM FORM -->
<lightning:layout >
<lightning:layoutItem padding="around-small" size="6">
<!-- CREATE NEW CAMPING ITEM -->
<div aria-labelledby="newcampingitemform">
<!-- BOXED AREA -->
<fieldset class="slds-box slds-theme--default slds-container--small">
<legend id="newcampingitemform" class="slds-text-heading--small
slds-p-vertical--medium">
Add Camping Item
</legend>
<!-- CREATE NEW CAMPING ITEM FORM -->
<form class="slds-form--stacked">
<lightning:input aura:id="campingitemform" label="Item Name"
name="campingitemname"
value="{!v.newItem.Name}"
required="true"/>
<lightning:input type="number" aura:id="campingitemform" label="Quantity"
name="campingitemquantity"
min="1"
value="{!v.newItem.Quantity__c}"
messageWhenRangeUnderflow="Enter at least 1"/>
<lightning:input type="number" aura:id="campingitemform" label="Price"
name="campingitemprice"
formatter="currency"
step="0.01"
value="{!v.newItem.Price__c}" />
<lightning:input type="checkbox" aura:id="campingitemform" label="Packed?"
name="campingitempacked"
checked="{!v.newItem.Packed__c}"/>
<lightning:button label="Create Item"
class="slds-m-top--medium"
variant="brand"
onclick="{!c.clickCreateItem}"/>
</form>
<!-- / CREATE NEW CAMPING ITEM FORM -->
</fieldset>
<!-- / BOXED AREA -->
</div>
<!-- / CREATE CAMPING NEW ITEM -->
</lightning:layoutItem>
</lightning:layout>
<!-- / NEW CAMPING ITEM FORM -->
<c:campingListItem items="{!v.items}"/>
</aura:component>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
d) campingListController.js
({
clickCreateItem: function(component, event, helper) {
var validItem = component.find('campingitemform').reduce(function (validSoFar, inputCmp) {
// Displays error messages for invalid fields
inputCmp.showHelpMessageIfInvalid();
return validSoFar && inputCmp.get('v.validity').valid;
}, true);
// If we pass error checking, do some real work
if(validItem){
// Create the new expense
var newItem = component.get("v.newItem");
console.log("Create item: " + JSON.stringify(newItem));
helper.createItem(component, newItem);
}
}
})
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
e) campingListHelper.js
({createItem: function(component, item) {
var theItem = component.get("v.items");
// Copy the expense to a new object
// THIS IS A DISGUSTING, TEMPORARY HACK
var newItem = JSON.parse(JSON.stringify(item));
console.log("Item before 'create': " + JSON.stringify(theItem));
theItem.push(newItem);
component.set("v.items", theItem);
console.log("Item after 'create': " + JSON.stringify(theItem));
component.set("v.newItem",{ 'sobjectType': 'Camping_Item__c',
'Name': '',
'Quantity__c': 0,
'Price__c': 0,
'Packed__c': false });
}
})
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
f) campingListItem.cmp
<aura:component >
<aura:attribute name="items" type="Camping_Item__c[]"/>
<lightning:card title="Items">
<p class="slds-p-horizontal--small">
<aura:iteration items="{!v.items}" var="item">
<c:campingListItems item="{!item}"/>
</aura:iteration>
</p>
</lightning:card>
</aura:component>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
g) campingListItems.cmp
<aura:component >
<aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
<!--aura:attribute name="formatdate" type="Date"/-->
<aura:attribute name="item" type="Camping_Item__c"/>
<lightning:card title="{!v.item.Name}" iconName="standard:scan_card"
class="{!v.item.Packed__c ?
'slds-theme--success' : ''}">
<aura:set attribute="footer">
<!--p>Date: <lightning:formattedDateTime value="{!v.formatdate}"/></p-->
<!--p class="slds-text-title"><lightning:relativeDateTime value="{!v.formatdate}"/></p-->
</aura:set>
<p class="slds-p-horizontal--small">
Quantity: {!v.item.Quantity__c}
</p>
<p class="slds-text-heading--medium slds-p-horizontal--small">
Price: <lightning:formattedNumber value="{!v.item.Price__c}" style="currency"/>
</p>
<p>
<lightning:input type="toggle"
label="Packed?"
name="packed"
class="slds-p-around--small"
checked="{!v.item.Packed__c}"
messageToggleActive="Yes"
messageToggleInactive="No"
onchange="{!c.clickPacked}"/>
</p>
</lightning:card>
</aura:component>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Thanks in advance for your assistance on this.
All Answers
just wondering if there was anyone who could assist with my query? Thanks.
Peter
Can you explain how you solved that ?
I'm stuck here as well.
It complains with the exact same message than you, except that I have the iteration properly configured. It's working just find when testing it ..
Here's my campingList component : And what it displays
Hope you'll have some guidance
Cheers
Problem was on the iteration part at the bottom, althought it's more related to the tags around than the iteration itself
With that piece of code it worked:
While working on the trailhead challenge "Connect Components with Events" I am getting this error - "The campingList component isn't iterating the array of items and creating campingListItem components."
Here is my code.
Thanks.
campingItem.app
campingHeader.cmp
campingList.cmp
campingListController.js campingListItem.cmp
campingListForm.cmp
campingListFormController.js
campingListFormHelper.js
campingListController.apxc
addItemEvent.evt
i'm also getting same error but not able to replicate this error. Please find the following code and let me know the issue of the code.
appriciate your help.
Thanks,
Rakesh
As you said, it seems to be an issue of the surrounding tags somehow.
It isn't logical to me that it should be this way. If there is a good explanation would love to hear about it.
While working on the trailhead challenge "Connect Components with Events" I am getting this error - "The campingList component isn't iterating the array of items and creating campingListItem components."
I have complited the challenge with below code.
campingHeader.cmp campingList.cmp campingListController.js campingListItem.cmp
All the best.
I passed the challenge with below code.
Good Luck!
1.campingListApp.app
2.campingList.cmp 3.campingListController.js
4.campingHeader.cmp
5.campingListItem.cmp
6.campingListItemController.js
Hi Folks,
I struggled and spent hours on this module (until I googled out of desparation), the challenge kept failing even when the sample worked. Couple things I had to change.
1. Move the iterator logic from a custom component(abstraction) to the campingList.cmp component and then still had to make the changes suggested by @Augustin Rieunier (Big thanks)
2. Had to port the controller logic to add them items (put) from a helper function the the main controller JS file (uggg....).
Hope the module creators will updated it to handle these nuanced issues.