Blocks, slots, & yielding
One of the most powerful features of Phlex is how well it can handle blocks of content. If youβre familiar with custom HTML elements or other component frameworks, you may have heard this referred to as βslotsβ.
Default block from a render
A very common way to use blocks is to render a component with a default block of content. This is done by calling the render
method on the component class and passing a block of content to it. This block is called when the view_template
method is invoked during the rendering process.
π Unlock content
Pre-order this course to unlock this video, source code, and content.
class Card::Component < βββββ::βββββββββ
def βββββββββββββ(&βββββ)
βββ(class: "card") do
ββ(class: "card-title") { "Hello, world!" }
yield
end
end
end
ββββββ ββββ::βββββββββ.βββ do
p "This is a block of content."
end
Multiple blocks
ββββ βββββ ββββββββββ ββββ ββββ ββββββββ βββββββ βββ ββββββββ βββ ββ βββ ββ βββ ββββ βββββββββ ββββββ ββββββ βββ βββββ ββ βββββββ ββ ββββ ββ ββββ ββββββββββ
class Card::Component < βββββ::βββββββββ
def βββββββββββββ(&βββββ)
βββ(class: "card") do
yield
end
end
def βββββ
ββ(class: "card-title") { yield }
end
end
ββββ ββ ββββ βββ ββ βββ ββββ β βββββ ββ βββββββ ββ βββ βββββ βββββββ
ββββββ ββββ::βββββββββ.βββ do |ββββ|
ββββ.βββββ { "Custom title" }
p { "This is a block of content." }
end
βββ ββββ ββ ββββββ βββ βββββ βββ βββββ ββββββ ββ ββββββ ββββ βββ βββββββββββββββ ββββββ ββββββ ββ βββ βββββββββ ββ βββ ββββ βββ βββββββ ββ ββββββ βββ ββββ βββ β βββ ββ ββββββββ ββββ βββ βββββββ ββ ββββββ βββ
Order matters
ββββ ββ ββββββ ββββββββ βββββββ βββ βββββ ββ βββββ ββββ βββ ββββββββ ββ ββββββββββ βββ βββββ βββββ ββββββ ββ βββ βββββββββ ββββ ββ ββββββββ ββββββ ββββββββ ββ βββ ββββββββββ βββββββ
ββββββ ββββ::βββββββββ.βββ do |ββββ|
p { "This is a block of content." }
β βββ βββββ βββββ ββ ββ βββ βββββββ βββββ ββ βββββ βββ βββββ
ββββ.βββββ { "Custom title" }
end
ββββ ββ βββ ββ βββββ βββββββ βββββ βββ βββββ βββββββ βββ βββββ ββ βββ βββββββ
Deferred rendering
βββββββββ βββ βββββ ββ βββββ ββββ ββββ ββ ββ ββββββββ βββββ βββββ ββββ βββββββ β ββββββββββ ββ βββββ ββββββ βββ βββββ ββββ ββ βββββββ βββ βββββ ββ ββββ βββββ βββ βββββββββ ββββββββββ ββ ββββ βββββββ βββββββ ββββ β βββββ βββββ
ββ ββββ βββββ βββββ ββββββ βββ βββββ ββββ βββ ββββ ββββββββ βββ ββββββ ββ ββββββ
class Card::Component < βββββ::βββββββββ
def βββββββββββββ(&)
ββββββ(&)
βββ(class: "card") do
ββ(class: "card-title", &ββββββ)
βββ(class: "card-content", &ββββββββ)
end
end
def βββββ(&βββββ)
ββββββ = βββββ
end
def βββββββ(&βββββ)
ββββββββ = βββββ
end
end
ββββββ ββββ ββ βββββ ββββ ββββ ββ ββββββ βββ
ββββββ ββββ::βββββββββ.βββ do |ββββ|
ββββ.βββββ { "This is a block of content." }
ββββ.βββββββ do
p { "Custom title" }
end
end
ββ βββ ββββ ββ ββ ββββββββ βββββ ββ βββββ βββ βββ βββββ βββββββ ββββββ βββββ βββ ββββββ βββ ββββββββ ββ βββ βββββ ββββ ββββ ββββββ ββ βββ ββββββββββ
ββββββ ββββ::βββββββββ.βββ do |ββββ|
ββββ.βββββββ do
p { "Custom title" }
end
ββββ.βββββ { "This is a block of content." }
end