Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Basic support for DataContext={resource: ...} #1392

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open

Conversation

exyi
Copy link
Member

@exyi exyi commented May 21, 2022

This functionality allows server-only rendering - i.e. building static HTML based on viewmodel which is not necessarily sent to the client.

The design is fairly simple - we allow resource binding
in data context and track that this data context does
not exist client-side (see the new ServerSideOnly property).
Using this server-only data context is not allowed in value
and staticCommand bindings. Note that using a value binding
inside the resource-bound control is allowed, it just cannot
reference _this. Since the context does not exist client-side,
we then translate _parent into $data instead of $parent.

Repeater, GridView and HierarchyRepeater should all support this.

@exyi exyi force-pushed the resource-datacontext branch 2 times, most recently from bcdd52d to e885da2 Compare May 25, 2022 18:23
@exyi exyi mentioned this pull request May 25, 2022
@exyi exyi marked this pull request as ready for review August 2, 2022 21:25
@exyi exyi requested a review from a team August 2, 2022 21:25
@exyi exyi force-pushed the resource-datacontext branch 2 times, most recently from efbaf1e to 3ee2344 Compare September 11, 2022 21:32
exyi added a commit that referenced this pull request Dec 7, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
exyi added a commit that referenced this pull request Dec 7, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
exyi added a commit that referenced this pull request Dec 21, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
@exyi exyi added this to the Version 5.0 milestone Jan 4, 2023
exyi added a commit that referenced this pull request Jan 4, 2023
Part is taken from #1392 which won't be merged for a while.
exyi added a commit that referenced this pull request Feb 1, 2023
Part is taken from #1392 which won't be merged for a while.
This functionality is essential for server-side
only rendering, but this patch is only the groundwork -
we still need to add support to Repeater and possibly other controls.

The design is fairly simple - we allow resource binding
in data context and track that this data context does
not exist client-side (see the new ServerSideOnly property).
Using this server-only data context is not allowed in value
and staticCommand bindings. Note that using a value binding
inside the resource-bound control is allowed, it just cannot
reference `_this`. Since the context does not exist client-side,
we then translate _parent into $data instead of $parent.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant