Binding in Special Attribute"

From Documentation
Line 39: Line 39:
 
= The "forEach" Versus Children Binding =
 
= The "forEach" Versus Children Binding =
 
<!--* forEach -> children binding -->
 
<!--* forEach -> children binding -->
The <tt>forEach</tt> attribute also has the same issue. You should use [[ZK Developer's Reference/MVVM/Data Binding/Children%20Binding| children binding]] instead of <tt>forEach</tt> with data binding to create multiple components repeatedly.  
+
The <tt>forEach</tt> attribute also has the same issue.  
  
 
'''specialAttribute.zul'''
 
'''specialAttribute.zul'''
<source lang='xml' high='3,5'>
+
<source lang='xml' high='3,5,7'>
  
 
<!-- "forEach" versus children binding  -->
 
<!-- "forEach" versus children binding  -->
 
<!-- wrong usage, no effect -->
 
<!-- wrong usage, no effect -->
 
<checkbox label="@load(each.firstName)" forEach="@load(vm.personList)" />
 
<checkbox label="@load(each.firstName)" forEach="@load(vm.personList)" />
 +
<!-- determined at the beginning -->
 +
<checkbox label="${each.firstName}" forEach="${vm.personList}" />
 
<!-- children binding -->
 
<!-- children binding -->
 
<div children="@load(vm.personList)">
 
<div children="@load(vm.personList)">
Line 55: Line 57:
 
</source>
 
</source>
  
 +
The first usage (line 3) is a wrong one. It doesn't create multiple components.
  
 +
In second one (line 5)
  
 +
You should use [[ZK Developer's Reference/MVVM/Data Binding/Children%20Binding| children binding]] instead of <tt>forEach</tt> with data binding to create multiple components repeatedly.
  
 
=Version History=
 
=Version History=

Revision as of 06:31, 15 March 2013


WarningTriangle-32x32.png This page is under construction, so we cannot guarantee the accuracy of the content!

location:

  • MVVM/Advanced/Parameter
  • MVVM/Advanced/Binding in Special Attributes

Special Attribute Issue

ZK Bind is a post-processing work on components after they are created and it can control most attributes to change a component's status. But there are some special attributes that ZK Bind can't work on them because those attributes' value are determined and fixed when components are created such as if and forEach. Therefore, binding on these special attributes takes no effect on components. But you may want the function that those special attributes provide, here we demonstrate alternives 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. We have several usage:

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)" />

The first one (line 2) is a wrong usage. The button will never be created.

In the second one (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.

The thrid one is what we recommend for most cases. You can binding on visible, and it brings you almost the same effect as if. The disabled 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>

The first usage (line 3) is a wrong one. It doesn't create multiple components.

In second one (line 5)

You should use children binding instead of forEach with data binding to create multiple components repeatedly.

Version History

Last Update : 2013/03/15


Version Date Content
6.5.1 March 2013 Initial




Last Update : 2013/03/15

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.