SlideShare a Scribd company logo
1 of 58
Mastering the
Lightning Framework
JF Paradis
Principal Engineer - Salesforce
@jfparadis
Part 1 – The declarative aspects
Overview
In this session you will learn:
What is Lightning, and how it compares with other Single Page Application
frameworks.
What is a component-based architecture, and its relation with OOP.
How the four Lightning base languages (XML, CSS, JavaScript, and Apex) are
used and combined to build components, and applications.
Single Page Application Frameworks
Polymer React Lightning Angular Ember
Lightning follows current best practices:
• Rendering like React
• Bindings like Ember
• Styling like Sass and Bootstrap
We are looking ahead:
• Emerging practices, like Web Components
• Member of TC39, the committee driving the evolution of JavaScript
What we do like the others
Lightning focuses on business needs:
• Access rights
• Secure DOM and Execution Context
• Stable API
• Complete platform
We build an ecosystem:
• App Exchange
• Interoperability with VisualForce
• Leverage current assets
What we do differently
Single Page Application Frameworks
Polymer React
Lightning
Angular EmberAura
• Available at https://github.com/forcedotcom/aura
• Think of Aura in Lightning as Webkit in Safari and Chrome
• Transparency
• Learning tool
• Open to contributions
• Contains features and components not yet exposed in Lightning
Open-Source Framework: Aura
Four languages in one framework
LIGHTNING
XML CSS
ApexJS
Four sections
XML
CSS Apex
JS
Section 1:
XML Component Definition
Section 2:
Styling Components
Section 3:
JS Controller and Helper
Section 4:
Apex Controller
Section 1: XML Component Definition
1.1 Component Based architecture
1.2 Structure of a component
1.3 Key components
1.4 Implementation Detail
1.1 Component-based architecture
Lightning Components
“Components are self-contained and [...] represent a reusable section of the UI,
and can range in granularity from a single line of text to an entire app.”
W3C Web Components
“Web Components [...] define widgets with a level of visual richness and
interactivity not possible with CSS alone, and ease of composition and reuse”
Flash Components
“Components are pre-built controls [...] that you can reuse within your projects.
[...] A component is generally a user interface widget, like a button, a checkbox,
or a menu bar.”
Component-based Frameworks
Polymorphism: process objects using a parent type or a parent class.
Inheritance: extend a behavior of a superclass.
Interfaces: define a contract.
Composition: contain instances of other classes.
Encapsulation: hide the data and the implementation.
Separation of concerns: deal with related sets of information.
Generalization: extract shared characteristics into superclass.
Specialization: derive subclass with specific behavior.
Modularity: write according to functionality and responsibility.
Similarities: Component-based vs Object Oriented
Object-oriented
Write according to a mental model of the actual or imagined objects it represents,
for example a user, a record, etc.
Component-based
Glue together other prefabricated components - much like in the fields of
electronics or mechanics.
Differences: Component-based vs Object Oriented
Inheritance vs Composition
Inheritance defines “is a” Composition defines “has a”
Formula 1
Ferrari
Car
Turbo Engine
Racing Tires
Frame
Cockpit
Ferrari
1.2 Structure of a component
Example set 1:
Lightning vs HTML
/c/basics101.app
Lightning vs Web Components
/c/basics102.app
• A bundle is a folder containing the resources
owned by the component: XML, JS, CSS, etc.
• The name of the folder is the component name.
• There is always one XML file per bundle, with the
same name as the bundle.
• The file extension defines the type of bundle:
• .cmp = component
• .app = application
• .intf = interface
• .evt = event
Component bundles
Example of a component XML
• Define the base type (enclosing tag):
• <aura:component>, <aura:application>, <aura:interface>, <aura:event>
• Set attributes values:
• implements = "<name>" (no default)
• abstract = "<true|false>" (defaults to false, can’t create an instance if true)
• extensible = "<true|false>" (defaults to false)
• Declare definitions
• <aura:attribute name="<name>”/> (declare an attribute)
• Important:
• <aura:set> (not a declaration, alternative syntax to set an attribute)
• Used primarily to set facets (arrays of components)
• <aura:set attribute="body”> (not required, implied)
Inside the component XML
Example of attribute declaration
Example set 2:
Passing attributes
/c/buttonTest.app?label=Ok
/c/meterTest.app?value=0.5
• Attributes are used to pass values into a component.
• The declaration:
• must have a name and a type,
• can set a default value, can specify required.
• The attributes are reusable declaratively inside the component.
• The reference follows the v.<name> syntax.
• Attributes member can also be referenced:
• Object members: v.<name>.<member>
• Array members: v.<name>.<index> or v.<name>[<index>]
• All attributes are shared with subclasses except body.
Component Attributes
Children populate the body attribute of their parent
Children populate the body attribute of their parent
<i>Text</i>
<p>
<i>Text</i>
</p>
<h1>Title</h1>
<p>
<i>Text</i>
</p>
Example set 3:
Simple Parent & Simple Child
/c/basics103.app
Ignored Child
/c/basics104.app
• It is declared by default on all components.
• Set to everything between opening and closing tag
• It’s of a special type Aura.component[] called “facet”.
• Equivalent to node properties innerHTML and children.
• There is one body instance for each level of inheritance.
• The body has a peculiar mode of inheritance:
• The child sets the body attribute of its parent,
• The parent can output its v.body inside its own body, it can also ignore it.
• Consequences:
• No child can override the parent body.
• Top parent ultimately decides what a component will render.
The body attribute
• Two types: property reference or function.
• Expression functions look like JavaScript but they work differently.
• They use a subset of the JavaScript functions.
• Those functions have logic to handle in null and undefined:
• null + "abc" = "nullabc" in JavaScript, but "abc" in Lightning.
• undefined + null = NaN in JavaScript, but "" in Lightning.
Expressions
Expressions: examples
• Attribute value passing (like passing a value to a JavaScript function):
• <ui:button label="{#v.whom}"/>
• Attribute reference passing (special Lightning mode):
• <ui:button label="{!v.whom}"/>
• Calculation:
• <div style="{!'width:' + (v.value * 100) + '%'}"/>
• Conditional Expression:
• <div class="{!v.isHidden ? 'hidden' : 'default'}"/>
Expressions: usage
1.3 Key Components
HTML components
• HTML components are instances of <aura:html>.
• Can be created using <aura:html tag="<tag>”> if an expression is
required.
• The majority of HTML5 tags are alowed.
• We don’t support unsafe or unnecessary tags:
• No <applet>, <object>, <font>, etc.
• HTML components are not extensible, neither is <aura:html>.
Example set 4:
Using <aura:if>
/c/basics106.app
Using <aura:renderIf>
/c/basics107.app
Conditionals
• There are two: <aura:if> and <aura:renderIf>:
• conditional: attribute “isTrue”,
• consequent: attribute “body”,
• alternative (optional): attribute “else”.
• Why two?
• <aura:renderIf> is the naive implementation,
• equivalent to using a function expression {! v.isTrue ? v.body : v.else },
• needs both facets created before the function is evaluated,
• don’t use <aura:renderIf>, it creates more components.
• Difference: <aura:if> creates and renders only the consequent or the
alternative, <aura:renderIf> creates both consequences, renders one.
Example set 5:
Using <aura:iteration>
/c/basics108.app
Loops
• One component <aura:iteration>.
• Uses the body as a template to create multiple instances.
• Iterates over an array attribute named items.
• Each item is placed into a customizable attribute called var.
• The loop index is specified using indexVar.
• Attributes start and end can be used to control which items are rendered.
1.4 Implementation Details
• From XML to DOM
• Lightning is not a template engine.
• Counting component instances
• Lightning is optimized for composition
• Inheritance is as expensive as composition
• Components created ≠ rendered:
• Best illustrated with <aura:if> and <aura:renderIf>
What’s under the hood?
Lightning isn’t a JS template engine (mustache, handlebars, etc.) which parses
the template file to replaces variables:
Template → HTML → DOM
Lightning create components:
• The server creates Java Objects from component XML,
• Components are serialized to JSON,
• The client creates JS Component instances,
• The JS Components create DOM elements:
XML → Java → JSON → JS → DOM
From XML to DOM
One instance per child and per parent
<aura:component>
<div><div><div><div>
</...</...</...</...
</aura:component>
<aura:application>
<meter>60%</...
<c:meter>60%</...
<c:meter>60%</...
</aura:application>
= 2 components (current + base parent)
= 4 components (simple HTML)
Total: 6
= 2 components
= 2 components (simple HTML + text)
= 7 components (6 above + text)
= 7 components
Total: 18
How to count components instances
In the browser console:
$A.componentService.countComponents()
With a bookmarklet:
javascript:alert("Components: "+$A.componentService.countComponents())
Example set 6:
Counting components
/c/basics105.app
Section 2: Styling Components
2.1 CSS in components
2.2 Limits of encapsulation
3.3 Using OOCSS
2.1 CSS in Components
Example set 7:
CSS in components
/c/basics201.app
• What you do:
• create a file named <component>.css
• placed in the component bundle
• all rules start with .THIS
• What Lightning does:
• wire the file to the cmp
• convert .THIS to .<namespace><Component> pseudo CSS class
• add <namespace><Component> to top element(s)
• creates any vendor-specific extension.
• CSS rules are scoped to a component since namespace:component is
unique.
CSS in components
2.2 Limits of Encapsulation
Example set 8:
Limits of CSS encapsulation
/c/basics202.app
• styling crosses component boundaries
• no true encapsulation, unlike virtual DOM from Web Components
• no CSS file means .THIS not added*
• parent can’t style using generated class name
• multiple top elements means multiple .THIS added
• CSS rules might not apply to every element
• removing top element might change rules
• .THIS tag becomes tag.THIS
• better to style other components by assigning them classes (API)
• no attribute class by default on custom components
• implement it yourself
Limits of CSS encapsulation
2.3 Using OOCSS
• Limit of component CSS:
• it creates a lot of repetition
• styles changes mean manually updating every component
• Limitation of “skinning”:
• overriding styles means more CSS
• breaks encapsulation
• unstable
• Limitations of CSS variables:
• styles are usually related
• a change in one style might produce unpredictable results
• e.g. text color and background color, padding
Before OOCSS?
Using a redline
• Object Oriented CSS
• technique to write CSS
• creates related CSS classes each one containing relates styles
• e.g. Bootstrap, jQuery UI, Foundation, Semantic UI
• Benefits:
• creates reusable CSS, reduces CSS bloat and improves consistency
• improves predictability
• creates an abstraction layer, an API
• e.g. components use the OOCSS classes as a styling vocabulary
• maintains functionality and presentation as orthogonal concerns
What is OOCSS?
Our OOCSS
• Documentation
• https://developer.salesforce.com/lightning/design-system
• How to use it:
• Install the package
• Add a declaration
• <ltng:require styles="/resource/SLDS105/assets/styles/salesforce-
lightning-design-system.css"/>
• Start writing your components
• Open-source
• https://github.com/salesforce-ux/design-system
Salesforce Lightning Design System
Examples set 9:
Using SLDS
/c/basics203.app
thank y u
Mastering the Lightning Framework - Part 1

More Related Content

What's hot

Salesforce online training || Salesforce Integration | salesforce lightning
Salesforce online training || Salesforce Integration | salesforce lightningSalesforce online training || Salesforce Integration | salesforce lightning
Salesforce online training || Salesforce Integration | salesforce lightning
suresh
 
Managing the Role Hierarchy at Enterprise Scale
Managing the Role Hierarchy at Enterprise ScaleManaging the Role Hierarchy at Enterprise Scale
Managing the Role Hierarchy at Enterprise Scale
Salesforce Developers
 

What's hot (20)

Best Practices with Apex in 2022.pdf
Best Practices with Apex in 2022.pdfBest Practices with Apex in 2022.pdf
Best Practices with Apex in 2022.pdf
 
Introduction to Salesforce.com
Introduction to Salesforce.comIntroduction to Salesforce.com
Introduction to Salesforce.com
 
Data model in salesforce
Data model in salesforceData model in salesforce
Data model in salesforce
 
Importing data to salesforce
Importing data to salesforceImporting data to salesforce
Importing data to salesforce
 
Reports and dashboards @salesforce
Reports and dashboards @salesforceReports and dashboards @salesforce
Reports and dashboards @salesforce
 
Documentation on salesforce communities
Documentation on salesforce communitiesDocumentation on salesforce communities
Documentation on salesforce communities
 
Lwc presentation
Lwc presentationLwc presentation
Lwc presentation
 
Introduction to the Salesforce Security Model
Introduction to the Salesforce Security ModelIntroduction to the Salesforce Security Model
Introduction to the Salesforce Security Model
 
Endless Use Cases with Salesforce Experience Cloud by Dar Veverka
Endless Use Cases with Salesforce Experience Cloud by Dar VeverkaEndless Use Cases with Salesforce Experience Cloud by Dar Veverka
Endless Use Cases with Salesforce Experience Cloud by Dar Veverka
 
Real Time Integration with Salesforce Platform Events
Real Time Integration with Salesforce Platform EventsReal Time Integration with Salesforce Platform Events
Real Time Integration with Salesforce Platform Events
 
Data Migration Made Easy
Data Migration Made EasyData Migration Made Easy
Data Migration Made Easy
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce data
 
Salesforce Community Cloud
Salesforce Community CloudSalesforce Community Cloud
Salesforce Community Cloud
 
Salesforce online training || Salesforce Integration | salesforce lightning
Salesforce online training || Salesforce Integration | salesforce lightningSalesforce online training || Salesforce Integration | salesforce lightning
Salesforce online training || Salesforce Integration | salesforce lightning
 
Salesforce data model
Salesforce data modelSalesforce data model
Salesforce data model
 
Lightning web components
Lightning web components Lightning web components
Lightning web components
 
Getting started with Salesforce security
Getting started with Salesforce securityGetting started with Salesforce security
Getting started with Salesforce security
 
Salesforce Communities
Salesforce CommunitiesSalesforce Communities
Salesforce Communities
 
Record sharing model in salesforce
Record sharing model in salesforceRecord sharing model in salesforce
Record sharing model in salesforce
 
Managing the Role Hierarchy at Enterprise Scale
Managing the Role Hierarchy at Enterprise ScaleManaging the Role Hierarchy at Enterprise Scale
Managing the Role Hierarchy at Enterprise Scale
 

Similar to Mastering the Lightning Framework - Part 1

WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Session 3 - Object oriented programming with Objective-C (part 1)
Session 3 - Object oriented programming with Objective-C (part 1)Session 3 - Object oriented programming with Objective-C (part 1)
Session 3 - Object oriented programming with Objective-C (part 1)
Vu Tran Lam
 

Similar to Mastering the Lightning Framework - Part 1 (20)

Handlebars & Require JS
Handlebars  & Require JSHandlebars  & Require JS
Handlebars & Require JS
 
Handlebars and Require.js
Handlebars and Require.jsHandlebars and Require.js
Handlebars and Require.js
 
Lightning web components - Introduction, component Lifecycle, Events, decorat...
Lightning web components - Introduction, component Lifecycle, Events, decorat...Lightning web components - Introduction, component Lifecycle, Events, decorat...
Lightning web components - Introduction, component Lifecycle, Events, decorat...
 
[2015/2016] Require JS and Handlebars JS
[2015/2016] Require JS and Handlebars JS[2015/2016] Require JS and Handlebars JS
[2015/2016] Require JS and Handlebars JS
 
My 70-480 HTML5 certification learning
My 70-480 HTML5 certification learningMy 70-480 HTML5 certification learning
My 70-480 HTML5 certification learning
 
Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptx
 
AJS UNIT-1 2021-converted.pdf
AJS UNIT-1 2021-converted.pdfAJS UNIT-1 2021-converted.pdf
AJS UNIT-1 2021-converted.pdf
 
Getting Started with React, When You’re an Angular Developer
Getting Started with React, When You’re an Angular DeveloperGetting Started with React, When You’re an Angular Developer
Getting Started with React, When You’re an Angular Developer
 
Salesforce Lightning Web Components Overview
Salesforce Lightning Web Components OverviewSalesforce Lightning Web Components Overview
Salesforce Lightning Web Components Overview
 
Understanding Framework Architecture using Eclipse
Understanding Framework Architecture using EclipseUnderstanding Framework Architecture using Eclipse
Understanding Framework Architecture using Eclipse
 
Java interview questions and answers
Java interview questions and answersJava interview questions and answers
Java interview questions and answers
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Aura Framework Overview
Aura Framework OverviewAura Framework Overview
Aura Framework Overview
 
Session 3 - Object oriented programming with Objective-C (part 1)
Session 3 - Object oriented programming with Objective-C (part 1)Session 3 - Object oriented programming with Objective-C (part 1)
Session 3 - Object oriented programming with Objective-C (part 1)
 
Aem best practices
Aem best practicesAem best practices
Aem best practices
 
object oriented programming language.pptx
object oriented programming language.pptxobject oriented programming language.pptx
object oriented programming language.pptx
 
Web Components v1
Web Components v1Web Components v1
Web Components v1
 
Java script
Java scriptJava script
Java script
 
Winter '19 release development.ppt
Winter '19 release development.pptWinter '19 release development.ppt
Winter '19 release development.ppt
 

More from Salesforce Developers

More from Salesforce Developers (20)

Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component Performance
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base Components
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer Highlights
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX India
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web Components
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web Components
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer Highlights
 
Live coding with LWC
Live coding with LWCLive coding with LWC
Live coding with LWC
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and Testing
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura Interoperability
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCP
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in Salesforce
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data Capture
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DX
 
Get Into Lightning Flow Development
Get Into Lightning Flow DevelopmentGet Into Lightning Flow Development
Get Into Lightning Flow Development
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS Connect
 
Introduction to MuleSoft
Introduction to MuleSoftIntroduction to MuleSoft
Introduction to MuleSoft
 
Modern App Dev: Modular Development Strategies
Modern App Dev: Modular Development StrategiesModern App Dev: Modular Development Strategies
Modern App Dev: Modular Development Strategies
 

Recently uploaded

Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Recently uploaded (20)

MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 

Mastering the Lightning Framework - Part 1

  • 1. Mastering the Lightning Framework JF Paradis Principal Engineer - Salesforce @jfparadis Part 1 – The declarative aspects
  • 2. Overview In this session you will learn: What is Lightning, and how it compares with other Single Page Application frameworks. What is a component-based architecture, and its relation with OOP. How the four Lightning base languages (XML, CSS, JavaScript, and Apex) are used and combined to build components, and applications.
  • 3. Single Page Application Frameworks Polymer React Lightning Angular Ember
  • 4. Lightning follows current best practices: • Rendering like React • Bindings like Ember • Styling like Sass and Bootstrap We are looking ahead: • Emerging practices, like Web Components • Member of TC39, the committee driving the evolution of JavaScript What we do like the others
  • 5. Lightning focuses on business needs: • Access rights • Secure DOM and Execution Context • Stable API • Complete platform We build an ecosystem: • App Exchange • Interoperability with VisualForce • Leverage current assets What we do differently
  • 6. Single Page Application Frameworks Polymer React Lightning Angular EmberAura
  • 7. • Available at https://github.com/forcedotcom/aura • Think of Aura in Lightning as Webkit in Safari and Chrome • Transparency • Learning tool • Open to contributions • Contains features and components not yet exposed in Lightning Open-Source Framework: Aura
  • 8. Four languages in one framework LIGHTNING XML CSS ApexJS
  • 9. Four sections XML CSS Apex JS Section 1: XML Component Definition Section 2: Styling Components Section 3: JS Controller and Helper Section 4: Apex Controller
  • 10. Section 1: XML Component Definition 1.1 Component Based architecture 1.2 Structure of a component 1.3 Key components 1.4 Implementation Detail
  • 12. Lightning Components “Components are self-contained and [...] represent a reusable section of the UI, and can range in granularity from a single line of text to an entire app.” W3C Web Components “Web Components [...] define widgets with a level of visual richness and interactivity not possible with CSS alone, and ease of composition and reuse” Flash Components “Components are pre-built controls [...] that you can reuse within your projects. [...] A component is generally a user interface widget, like a button, a checkbox, or a menu bar.” Component-based Frameworks
  • 13. Polymorphism: process objects using a parent type or a parent class. Inheritance: extend a behavior of a superclass. Interfaces: define a contract. Composition: contain instances of other classes. Encapsulation: hide the data and the implementation. Separation of concerns: deal with related sets of information. Generalization: extract shared characteristics into superclass. Specialization: derive subclass with specific behavior. Modularity: write according to functionality and responsibility. Similarities: Component-based vs Object Oriented
  • 14. Object-oriented Write according to a mental model of the actual or imagined objects it represents, for example a user, a record, etc. Component-based Glue together other prefabricated components - much like in the fields of electronics or mechanics. Differences: Component-based vs Object Oriented
  • 15. Inheritance vs Composition Inheritance defines “is a” Composition defines “has a” Formula 1 Ferrari Car Turbo Engine Racing Tires Frame Cockpit Ferrari
  • 16. 1.2 Structure of a component
  • 17. Example set 1: Lightning vs HTML /c/basics101.app Lightning vs Web Components /c/basics102.app
  • 18. • A bundle is a folder containing the resources owned by the component: XML, JS, CSS, etc. • The name of the folder is the component name. • There is always one XML file per bundle, with the same name as the bundle. • The file extension defines the type of bundle: • .cmp = component • .app = application • .intf = interface • .evt = event Component bundles
  • 19. Example of a component XML
  • 20. • Define the base type (enclosing tag): • <aura:component>, <aura:application>, <aura:interface>, <aura:event> • Set attributes values: • implements = "<name>" (no default) • abstract = "<true|false>" (defaults to false, can’t create an instance if true) • extensible = "<true|false>" (defaults to false) • Declare definitions • <aura:attribute name="<name>”/> (declare an attribute) • Important: • <aura:set> (not a declaration, alternative syntax to set an attribute) • Used primarily to set facets (arrays of components) • <aura:set attribute="body”> (not required, implied) Inside the component XML
  • 21. Example of attribute declaration
  • 22. Example set 2: Passing attributes /c/buttonTest.app?label=Ok /c/meterTest.app?value=0.5
  • 23. • Attributes are used to pass values into a component. • The declaration: • must have a name and a type, • can set a default value, can specify required. • The attributes are reusable declaratively inside the component. • The reference follows the v.<name> syntax. • Attributes member can also be referenced: • Object members: v.<name>.<member> • Array members: v.<name>.<index> or v.<name>[<index>] • All attributes are shared with subclasses except body. Component Attributes
  • 24. Children populate the body attribute of their parent
  • 25. Children populate the body attribute of their parent <i>Text</i> <p> <i>Text</i> </p> <h1>Title</h1> <p> <i>Text</i> </p>
  • 26. Example set 3: Simple Parent & Simple Child /c/basics103.app Ignored Child /c/basics104.app
  • 27. • It is declared by default on all components. • Set to everything between opening and closing tag • It’s of a special type Aura.component[] called “facet”. • Equivalent to node properties innerHTML and children. • There is one body instance for each level of inheritance. • The body has a peculiar mode of inheritance: • The child sets the body attribute of its parent, • The parent can output its v.body inside its own body, it can also ignore it. • Consequences: • No child can override the parent body. • Top parent ultimately decides what a component will render. The body attribute
  • 28. • Two types: property reference or function. • Expression functions look like JavaScript but they work differently. • They use a subset of the JavaScript functions. • Those functions have logic to handle in null and undefined: • null + "abc" = "nullabc" in JavaScript, but "abc" in Lightning. • undefined + null = NaN in JavaScript, but "" in Lightning. Expressions
  • 30. • Attribute value passing (like passing a value to a JavaScript function): • <ui:button label="{#v.whom}"/> • Attribute reference passing (special Lightning mode): • <ui:button label="{!v.whom}"/> • Calculation: • <div style="{!'width:' + (v.value * 100) + '%'}"/> • Conditional Expression: • <div class="{!v.isHidden ? 'hidden' : 'default'}"/> Expressions: usage
  • 32. HTML components • HTML components are instances of <aura:html>. • Can be created using <aura:html tag="<tag>”> if an expression is required. • The majority of HTML5 tags are alowed. • We don’t support unsafe or unnecessary tags: • No <applet>, <object>, <font>, etc. • HTML components are not extensible, neither is <aura:html>.
  • 33. Example set 4: Using <aura:if> /c/basics106.app Using <aura:renderIf> /c/basics107.app
  • 34. Conditionals • There are two: <aura:if> and <aura:renderIf>: • conditional: attribute “isTrue”, • consequent: attribute “body”, • alternative (optional): attribute “else”. • Why two? • <aura:renderIf> is the naive implementation, • equivalent to using a function expression {! v.isTrue ? v.body : v.else }, • needs both facets created before the function is evaluated, • don’t use <aura:renderIf>, it creates more components. • Difference: <aura:if> creates and renders only the consequent or the alternative, <aura:renderIf> creates both consequences, renders one.
  • 35. Example set 5: Using <aura:iteration> /c/basics108.app
  • 36. Loops • One component <aura:iteration>. • Uses the body as a template to create multiple instances. • Iterates over an array attribute named items. • Each item is placed into a customizable attribute called var. • The loop index is specified using indexVar. • Attributes start and end can be used to control which items are rendered.
  • 38. • From XML to DOM • Lightning is not a template engine. • Counting component instances • Lightning is optimized for composition • Inheritance is as expensive as composition • Components created ≠ rendered: • Best illustrated with <aura:if> and <aura:renderIf> What’s under the hood?
  • 39. Lightning isn’t a JS template engine (mustache, handlebars, etc.) which parses the template file to replaces variables: Template → HTML → DOM Lightning create components: • The server creates Java Objects from component XML, • Components are serialized to JSON, • The client creates JS Component instances, • The JS Components create DOM elements: XML → Java → JSON → JS → DOM From XML to DOM
  • 40. One instance per child and per parent <aura:component> <div><div><div><div> </...</...</...</... </aura:component> <aura:application> <meter>60%</... <c:meter>60%</... <c:meter>60%</... </aura:application> = 2 components (current + base parent) = 4 components (simple HTML) Total: 6 = 2 components = 2 components (simple HTML + text) = 7 components (6 above + text) = 7 components Total: 18
  • 41. How to count components instances In the browser console: $A.componentService.countComponents() With a bookmarklet: javascript:alert("Components: "+$A.componentService.countComponents())
  • 42. Example set 6: Counting components /c/basics105.app
  • 43. Section 2: Styling Components 2.1 CSS in components 2.2 Limits of encapsulation 3.3 Using OOCSS
  • 44. 2.1 CSS in Components
  • 45. Example set 7: CSS in components /c/basics201.app
  • 46. • What you do: • create a file named <component>.css • placed in the component bundle • all rules start with .THIS • What Lightning does: • wire the file to the cmp • convert .THIS to .<namespace><Component> pseudo CSS class • add <namespace><Component> to top element(s) • creates any vendor-specific extension. • CSS rules are scoped to a component since namespace:component is unique. CSS in components
  • 47. 2.2 Limits of Encapsulation
  • 48. Example set 8: Limits of CSS encapsulation /c/basics202.app
  • 49. • styling crosses component boundaries • no true encapsulation, unlike virtual DOM from Web Components • no CSS file means .THIS not added* • parent can’t style using generated class name • multiple top elements means multiple .THIS added • CSS rules might not apply to every element • removing top element might change rules • .THIS tag becomes tag.THIS • better to style other components by assigning them classes (API) • no attribute class by default on custom components • implement it yourself Limits of CSS encapsulation
  • 51. • Limit of component CSS: • it creates a lot of repetition • styles changes mean manually updating every component • Limitation of “skinning”: • overriding styles means more CSS • breaks encapsulation • unstable • Limitations of CSS variables: • styles are usually related • a change in one style might produce unpredictable results • e.g. text color and background color, padding Before OOCSS?
  • 53. • Object Oriented CSS • technique to write CSS • creates related CSS classes each one containing relates styles • e.g. Bootstrap, jQuery UI, Foundation, Semantic UI • Benefits: • creates reusable CSS, reduces CSS bloat and improves consistency • improves predictability • creates an abstraction layer, an API • e.g. components use the OOCSS classes as a styling vocabulary • maintains functionality and presentation as orthogonal concerns What is OOCSS?
  • 55. • Documentation • https://developer.salesforce.com/lightning/design-system • How to use it: • Install the package • Add a declaration • <ltng:require styles="/resource/SLDS105/assets/styles/salesforce- lightning-design-system.css"/> • Start writing your components • Open-source • https://github.com/salesforce-ux/design-system Salesforce Lightning Design System
  • 56. Examples set 9: Using SLDS /c/basics203.app