Shared Bindings¶
Since each page contains it’s own bindings, If you need to reuse parts of layout with their own handlers, you can put the bindings in a list and copy it on each pages.
Example with an header included on two pages¶
from dazzler.components import core
from dazzler.system import Binding, Trigger
def header(title):
return core.Container([
core.Html(2),
core.Button('Shared click', identity='shared-btn'),
core.Container(identity='shared-output', class_name='row')
], class_name='row')
async def on_load(ctx):
shared_clicks = await ctx.session.get('shared_clicks')
await ctx.set_aspect('shared-output', children=shared_clicks)
async def on_click(ctx):
shared_clicks = await ctx.session.get('shared_clicks')
shared_clicks += 1
await ctx.session.set('shared_clicks', shared_clicks)
await ctx.set_aspect('shared-output', children=shared_clicks)
# Since there is no page yet, we can store the bindings
# in a list and use the object based Binding wrapper.
header_bindings = [
Binding(Trigger('shared-output', 'class_name'))(on_load),
Binding(Trigger('shared-btn', 'clicks'))(on_clicks)
]
from dazzler.components import core
from dazzler.system import Page
from .header import header, header_bindings
page = Page(
__name__,
core.Container([
header('Page 1'),
core.Container('page one content')
]),
# It is important to copy the list.
# Other it will be shared across pages and all bindings
# will be added to the same list.
bindings=header_bindings.copy()
)
Repeat for any page where you want the header included.