Binding in Special Attribute"
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | |||
Line 11: | Line 10: | ||
<!-- ZK Bind doesn't work on those special attributes. --> | <!-- ZK Bind doesn't work on those special attributes. --> | ||
− | ZK Bind is a post-processing work on components after they have been created and it can control most attributes to change a component's status. However, there are [[ZUML_Reference/ZUML/Attributes| some special attributes]] such as < | + | ZK Bind is a post-processing work on components after they have been created and it can control most attributes to change a component's status. However, there are [[ZUML_Reference/ZUML/Attributes| some special attributes]] such as <code>if</code> and <code>forEach</code> in which ZK Bind can't work on because these attributes' value are determined and fixed when components are created. Therefore, binding these special attributes takes no effect on components, but you may want to use the functions that these special attributes provide, here we demonstrate alternative methods in MVVM approach. |
= The "if" Versus the "visible" = | = The "if" Versus the "visible" = | ||
Line 19: | Line 18: | ||
'''specialAttribte.zul''' | '''specialAttribte.zul''' | ||
− | <source lang='xml' | + | <source lang='xml' highlight='2, 4, 6,7'> |
<!-- wrong usage, no effect --> | <!-- wrong usage, no effect --> | ||
Line 31: | Line 30: | ||
</source> | </source> | ||
− | * Line 2: It is a wrong usage | + | * Line 2: It is a wrong usage; the delete button will never be created. |
* Line 4: The button's creation is determined when a user visits the page and won't appear unless the user becomes a administrator and visits the page again. | * Line 4: The button's creation is determined when a user visits the page and won't appear unless the user becomes a administrator and visits the page again. | ||
− | * Line 6,7: It is what we recommend for most cases. You can bind on < | + | * Line 6,7: It is what we recommend for most cases. You can bind on <code>visible</code>, and it brings you almost the same effect as <code>if</code>. The <code>disabled</code> also has similar effect. |
= The "forEach" Versus Children Binding = | = The "forEach" Versus Children Binding = | ||
<!--* forEach -> children binding --> | <!--* forEach -> children binding --> | ||
− | The < | + | The <code>forEach</code> attribute also has the same issue. |
'''specialAttribute.zul''' | '''specialAttribute.zul''' | ||
− | <source lang='xml' | + | <source lang='xml' highlight='3,5,7'> |
<!-- "forEach" versus children binding --> | <!-- "forEach" versus children binding --> | ||
Line 57: | Line 56: | ||
</source> | </source> | ||
− | * Line 3: It is a wrong usage | + | * Line 3: It is a wrong usage; it doesn't create multiple checkboxes. |
− | * Line 5: The checkboxes are created at the beginning when a user visits the page and won't change even if we change < | + | * Line 5: The checkboxes are created at the beginning when a user visits the page and won't change even if we change <code>vm.personLIst</code>. |
* Line 7: [[ZK Developer's Reference/MVVM/Data Binding/Children%20Binding| Children binding]] is used when you want to dynamically create and destroy components. | * Line 7: [[ZK Developer's Reference/MVVM/Data Binding/Children%20Binding| Children binding]] is used when you want to dynamically create and destroy components. | ||
Line 72: | Line 71: | ||
| Initial | | Initial | ||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 07:29, 8 July 2022
location:
- MVVM/Advanced/Parameter
- MVVM/Advanced/Binding in Special Attributes
Special Attribute Issue
ZK Bind is a post-processing work on components after they have been created and it can control most attributes to change a component's status. However, there are some special attributes such as if
and forEach
in which ZK Bind can't work on because these attributes' value are determined and fixed when components are created. Therefore, binding these special attributes takes no effect on components, but you may want to use the functions that these special attributes provide, here we demonstrate alternative methods in MVVM approach.
The "if" Versus the "visible"
Assume that you want to show a "Delete" button only to a user who has administrative permission. There are several usages:
specialAttribte.zul
<!-- wrong usage, no effect -->
<button label="Delete " if="@load(vm.currentUser.admin)" />
<!-- determined at the beginning -->
<button label="Delete (EL)" if="${vm.currentUser.admin}" />
<!-- can change during user interaction -->
<button label="Delete (visible)" visible="@load(vm.currentUser.admin)" />
<button label="Delete (disabled)" disabled="@load(not vm.currentUser.admin)" />
<checkbox label="Is Admin" checked="@bind(vm.currentUser.admin)" />
- Line 2: It is a wrong usage; the delete button will never be created.
- Line 4: The button's creation is determined when a user visits the page and won't appear unless the user becomes a administrator and visits the page again.
- Line 6,7: It is what we recommend for most cases. You can bind on
visible
, and it brings you almost the same effect asif
. Thedisabled
also has similar effect.
The "forEach" Versus Children Binding
The forEach
attribute also has the same issue.
specialAttribute.zul
<!-- "forEach" versus children binding -->
<!-- wrong usage, no effect -->
<checkbox label="@load(each.firstName)" forEach="@load(vm.personList)" />
<!-- determined at the beginning -->
<checkbox label="${each.firstName}" forEach="${vm.personList}" />
<!-- children binding -->
<div children="@load(vm.personList)">
<template name="children">
<checkbox label="@load(each.firstName)" />
</template>
</div>
- Line 3: It is a wrong usage; it doesn't create multiple checkboxes.
- Line 5: The checkboxes are created at the beginning when a user visits the page and won't change even if we change
vm.personLIst
.
- Line 7: Children binding is used when you want to dynamically create and destroy components.
Version History
Version | Date | Content |
---|---|---|
6.5.1 | March 2013 | Initial |