SlideShare a Scribd company logo
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 (20)

PDF
Dynamic input tables lwc vs aura vs. visualforce
Mike Tetlow
 
PPTX
What Is Salesforce? | Salesforce Training - What Does Salesforce Do? | Salesf...
Edureka!
 
PPTX
Introducing the Salesforce platform
John Stevenson
 
PPTX
Azure purview
Shafqat Turza
 
PPTX
Salesforce CPQ by yuvaraj
Yuvaraj P
 
PDF
Setting up Security in Your Salesforce Instance
Salesforce Developers
 
PPTX
Exploring the Salesforce REST API
Salesforce Developers
 
PDF
Flow in Salesforce
vikas singh
 
PDF
Microsoft Azure Active Directory
David J Rosenthal
 
PPTX
Azure Pipelines
Mithun Shanbhag
 
PDF
A Practical Guide to Cloud Migration
Alaina Carter
 
PPTX
Salesforce sales cloud solutions
JanBask LLC
 
PDF
Salesforce overview
Ratchata Ardchawuthikulawong
 
PPTX
Microsoft Azure alerts
Student
 
PDF
Lwc presentation
Nithesh N
 
PPTX
Azure key vault
Rahul Nath
 
PPTX
The Evolution of Integration
Software AG
 
PPTX
Salesforce Overview For Beginners/Students
Sujesh Ramachandran
 
PDF
Introduction to Azure
Robert Crane
 
PPTX
Salesforce online training || Salesforce Integration | salesforce lightning
suresh
 
Dynamic input tables lwc vs aura vs. visualforce
Mike Tetlow
 
What Is Salesforce? | Salesforce Training - What Does Salesforce Do? | Salesf...
Edureka!
 
Introducing the Salesforce platform
John Stevenson
 
Azure purview
Shafqat Turza
 
Salesforce CPQ by yuvaraj
Yuvaraj P
 
Setting up Security in Your Salesforce Instance
Salesforce Developers
 
Exploring the Salesforce REST API
Salesforce Developers
 
Flow in Salesforce
vikas singh
 
Microsoft Azure Active Directory
David J Rosenthal
 
Azure Pipelines
Mithun Shanbhag
 
A Practical Guide to Cloud Migration
Alaina Carter
 
Salesforce sales cloud solutions
JanBask LLC
 
Salesforce overview
Ratchata Ardchawuthikulawong
 
Microsoft Azure alerts
Student
 
Lwc presentation
Nithesh N
 
Azure key vault
Rahul Nath
 
The Evolution of Integration
Software AG
 
Salesforce Overview For Beginners/Students
Sujesh Ramachandran
 
Introduction to Azure
Robert Crane
 
Salesforce online training || Salesforce Integration | salesforce lightning
suresh
 

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

PDF
Handlebars & Require JS
Ivano Malavolta
 
PPTX
Lightning web components
Cloud Analogy
 
PDF
Handlebars and Require.js
Ivano Malavolta
 
PPTX
Lightning web components - Introduction, component Lifecycle, Events, decorat...
Nidhi Sharma
 
PDF
[2015/2016] Require JS and Handlebars JS
Ivano Malavolta
 
PPTX
My 70-480 HTML5 certification learning
Syed Irtaza Ali
 
PPTX
Developing Lightning Components for Communities.pptx
Dmitry Vinnik
 
PDF
AJS UNIT-1 2021-converted.pdf
SreeVani74
 
PDF
Getting Started with React, When You’re an Angular Developer
Fabrit Global
 
PPTX
Salesforce Lightning Web Components Overview
Nagarjuna Kaipu
 
PPT
Understanding Framework Architecture using Eclipse
anshunjain
 
DOCX
Java interview questions and answers
Krishnaov
 
PDF
Ruby On Rails
Balint Erdi
 
PPTX
Angular Framework ppt for beginners and advanced
Preetha Ganapathi
 
PDF
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
PDF
Aura Framework Overview
rajdeep
 
PDF
Session 3 - Object oriented programming with Objective-C (part 1)
Vu Tran Lam
 
PPTX
Aem best practices
Jitendra Tomar
 
PPTX
object oriented programming language.pptx
syedabbas594247
 
PDF
Web Components v1
Mike Wilcox
 
Handlebars & Require JS
Ivano Malavolta
 
Lightning web components
Cloud Analogy
 
Handlebars and Require.js
Ivano Malavolta
 
Lightning web components - Introduction, component Lifecycle, Events, decorat...
Nidhi Sharma
 
[2015/2016] Require JS and Handlebars JS
Ivano Malavolta
 
My 70-480 HTML5 certification learning
Syed Irtaza Ali
 
Developing Lightning Components for Communities.pptx
Dmitry Vinnik
 
AJS UNIT-1 2021-converted.pdf
SreeVani74
 
Getting Started with React, When You’re an Angular Developer
Fabrit Global
 
Salesforce Lightning Web Components Overview
Nagarjuna Kaipu
 
Understanding Framework Architecture using Eclipse
anshunjain
 
Java interview questions and answers
Krishnaov
 
Ruby On Rails
Balint Erdi
 
Angular Framework ppt for beginners and advanced
Preetha Ganapathi
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Aura Framework Overview
rajdeep
 
Session 3 - Object oriented programming with Objective-C (part 1)
Vu Tran Lam
 
Aem best practices
Jitendra Tomar
 
object oriented programming language.pptx
syedabbas594247
 
Web Components v1
Mike Wilcox
 
Ad

More from Salesforce Developers (20)

PDF
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Salesforce Developers
 
PDF
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Salesforce Developers
 
PDF
Local development with Open Source Base Components
Salesforce Developers
 
PPTX
TrailheaDX India : Developer Highlights
Salesforce Developers
 
PDF
Why developers shouldn’t miss TrailheaDX India
Salesforce Developers
 
PPTX
CodeLive: Build Lightning Web Components faster with Local Development
Salesforce Developers
 
PPTX
CodeLive: Converting Aura Components to Lightning Web Components
Salesforce Developers
 
PPTX
Enterprise-grade UI with open source Lightning Web Components
Salesforce Developers
 
PPTX
TrailheaDX and Summer '19: Developer Highlights
Salesforce Developers
 
PDF
Live coding with LWC
Salesforce Developers
 
PDF
Lightning web components - Episode 4 : Security and Testing
Salesforce Developers
 
PDF
LWC Episode 3- Component Communication and Aura Interoperability
Salesforce Developers
 
PDF
Lightning web components episode 2- work with salesforce data
Salesforce Developers
 
PDF
Lightning web components - Episode 1 - An Introduction
Salesforce Developers
 
PDF
Migrating CPQ to Advanced Calculator and JSQCP
Salesforce Developers
 
PDF
Scale with Large Data Volumes and Big Objects in Salesforce
Salesforce Developers
 
PDF
Replicate Salesforce Data in Real Time with Change Data Capture
Salesforce Developers
 
PDF
Modern Development with Salesforce DX
Salesforce Developers
 
PDF
Get Into Lightning Flow Development
Salesforce Developers
 
PDF
Integrate CMS Content Into Lightning Communities with CMS Connect
Salesforce Developers
 
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Salesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Salesforce Developers
 
Local development with Open Source Base Components
Salesforce Developers
 
TrailheaDX India : Developer Highlights
Salesforce Developers
 
Why developers shouldn’t miss TrailheaDX India
Salesforce Developers
 
CodeLive: Build Lightning Web Components faster with Local Development
Salesforce Developers
 
CodeLive: Converting Aura Components to Lightning Web Components
Salesforce Developers
 
Enterprise-grade UI with open source Lightning Web Components
Salesforce Developers
 
TrailheaDX and Summer '19: Developer Highlights
Salesforce Developers
 
Live coding with LWC
Salesforce Developers
 
Lightning web components - Episode 4 : Security and Testing
Salesforce Developers
 
LWC Episode 3- Component Communication and Aura Interoperability
Salesforce Developers
 
Lightning web components episode 2- work with salesforce data
Salesforce Developers
 
Lightning web components - Episode 1 - An Introduction
Salesforce Developers
 
Migrating CPQ to Advanced Calculator and JSQCP
Salesforce Developers
 
Scale with Large Data Volumes and Big Objects in Salesforce
Salesforce Developers
 
Replicate Salesforce Data in Real Time with Change Data Capture
Salesforce Developers
 
Modern Development with Salesforce DX
Salesforce Developers
 
Get Into Lightning Flow Development
Salesforce Developers
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Salesforce Developers
 
Ad

Recently uploaded (20)

PPTX
Comprehensive Guide: Shoviv Exchange to Office 365 Migration Tool 2025
Shoviv Software
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PPTX
Human Resources Information System (HRIS)
Amity University, Patna
 
PDF
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
PPTX
Revolutionizing Code Modernization with AI
KrzysztofKkol1
 
PPTX
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
PPTX
An Introduction to ZAP by Checkmarx - Official Version
Simon Bennetts
 
DOCX
Import Data Form Excel to Tally Services
Tally xperts
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PPTX
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PDF
Streamline Contractor Lifecycle- TECH EHS Solution
TECH EHS Solution
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PDF
Mobile CMMS Solutions Empowering the Frontline Workforce
CryotosCMMSSoftware
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PPTX
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
PPTX
Equipment Management Software BIS Safety UK.pptx
BIS Safety Software
 
PDF
GetOnCRM Speeds Up Agentforce 3 Deployment for Enterprise AI Wins.pdf
GetOnCRM Solutions
 
Comprehensive Guide: Shoviv Exchange to Office 365 Migration Tool 2025
Shoviv Software
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
Human Resources Information System (HRIS)
Amity University, Patna
 
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
Revolutionizing Code Modernization with AI
KrzysztofKkol1
 
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
An Introduction to ZAP by Checkmarx - Official Version
Simon Bennetts
 
Import Data Form Excel to Tally Services
Tally xperts
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Streamline Contractor Lifecycle- TECH EHS Solution
TECH EHS Solution
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
Mobile CMMS Solutions Empowering the Frontline Workforce
CryotosCMMSSoftware
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
Equipment Management Software BIS Safety UK.pptx
BIS Safety Software
 
GetOnCRM Speeds Up Agentforce 3 Deployment for Enterprise AI Wins.pdf
GetOnCRM Solutions
 

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