8. Visualforce Page-Centric Model
1. Browser requests page
Client Server
4. Browser renders html
2. Server executes Apex code
3. Server returns page (html + data)
Show different data? Back to 1
Show different view? Back to 1
9. Pros
1. Proven model
2. Productivity. Easy to implement
3. Naturally splits large apps into small, manageable units (pages)
Caveats
1. Limited interactivity
2. Higher latency
Visualforce Page Centric Model
10. Lightning App-Centric Model
1. Browser requests Component
Client Server
3. Browser builds UI with JavaScript
4. Browser requests data
7. Back to 3
2. Server returns Component Bundle
5. Server executes Apex
6. Server returns data (data only!)
Show different data? Back to 4
Show different view? Back to 3
11. Pros
• Enables highly interactive/immersive user experiences
• Less page refreshes
• Tightly integrated (no iframe)
• Composable
Caveats
• Higher learning curve compared to vanilla Visualforce pages
• Higher level of complexity. Building an app is generally more complex than building a page
Lightning Components App Centric Model
12. Creating an Aura-Enabled Apex Controller
public
with
sharing
class
AccountController
{
@AuraEnabled
public
static
List<Account>
findAll()
{
return
[SELECT
id,
name
FROM
Account];
}
}
13. 1. Create an Aura-enabled Apex controller named
AccountController
2. Add a findAll() method that returns accounts that have
location information
Challenge
18. 1. In the Salesforce1 app
2. In App Builder
3. In Lightning Applications
Where can I use Lightning Components?
19. Using a Lightning Component in the Salesforce1 App
1. Implement the force:appHostable interface
<aura:component
implements="force:appHostable">
2. Create a Tab
3. Add the Tab to Mobile Navigation
20. Using a Lightning Component in a Lightning App
1. Create a Lightning App
File > New > Lightning Application
2. Embed the Lightning Component
<aura:application>
<c:AccountLocator/>
</aura:application>
Useful for creating fullscreen apps or for testing components during development
21. 1. Create the AccountLocator component
2. Add AccountLocator to the Salesforce1 App menu
Challenge
23. Attributes
• The data of the component
• Available anywhere in the component
• Examples:
<aura:attribute
name="price"
type="Number"/>
<aura:attribute
name="title"
type="String"/>
<aura:attribute name="account" type="Account"/>
<aura:attribute name="accounts" type="Account[]"/>
24. Data Binding
• {! } notation
<aura:attribute
name="account"
type="Account"/>
<li><a>{!v.account.Name}</a></li>
• Bidirectional in ui: components
<aura:attribute
name="price"
type="Number"/>
<ui:inputNumber
label="Principal:"
value="{!v.price}"
format="#"/>
Price attribute value is updated automatically when user types in input field
31. 1. Create the AccountList component responsible for displaying
the list of accounts
2. Create the AccountListItem component that you nest inside
AccountList to render individual accounts in the list
Challenge
33. • External JavaScript libraries and CSS style sheets must be loaded as static
resources
• Use the <ltng:require>
tag to load them
• Loading is asynchronous
• afterScriptLoaded event is triggered after files have been succesfully loaded
Loading External JavaScript Libraries and CSS Files
37. Using the afterScriptLoaded Event
<ltng:require
scripts="/resource/leaflet/leaflet.js"
styles="/resource/leaflet/leaflet.css"
afterScriptsLoaded="{!c.renderMap}"
/>
38. 1. Load leaflet JS library
2. Load Leaflet CSS
3. Render the map when files are loaded
Challenge
45. 1. Create the AccountSelected event
2. Trigger the AccountSelected event in AccountList
3. Handle the AccountSelected event in AccountMap and center the map on
the selected account location
Challenge
47. 1. Lightning Components enable you to extend standard features
2. Don't reinvent the wheel
For example, if your component needs an account details view: use the standard one, don't
create your own
3. Navigation between standard features and custom components should be smooth and feel
integrated: users shouldn't notice they are switching between standard and custom features
4. Platform events allow you to integrate your custom components into the standard experience
Salesforce1 Integration
48. Firing a Platform Event
var
event
=
$A.get("e.force:navigateToSObject");
event.setParams({
"recordId":
accountId
});
event.fire();
This event will be handled be the Salesforce1 app which will then navigate
to the account's details view
52. Using a Lightning Component in App Builder
1. Implement
the
flexipage:availableForAllPageTypes
interface
<aura:component
implements="flexipage:availableForAllPageTypes">
2. Create
a
component
description
in
the
Design
part
<design:component
label="AccountList">
</design:component>
3. Drag
the
component
from
the
component
palette
in
App
Builder