Client Attribute"
(Created page with '{{ZUMLReferencePageHeader}} Name: client attribute Namespace: http://www.zkoss.org/2005/zk/client/attribute Namespace shortcut: client/attribute It is the reserved namespace…') |
|||
(37 intermediate revisions by 9 users not shown) | |||
Line 4: | Line 4: | ||
Namespace: http://www.zkoss.org/2005/zk/client/attribute | Namespace: http://www.zkoss.org/2005/zk/client/attribute | ||
Namespace shortcut: client/attribute | Namespace shortcut: client/attribute | ||
+ | Java: <javadoc method="CLIENT_ATTRIBUTE_NAMESPACE">org.zkoss.zk.ui.metainfo.LanguageDefinition</javadoc> | ||
− | It is the reserved namespace for specifying client-side DOM attributes. Unlike the client namespace, which assigns something to widgets, the client/attribute namespace assigns to the DOM tree directly. | + | It is the reserved namespace for specifying client-side DOM attributes. Unlike the client namespace, which assigns something to widgets, the client/attribute namespace assigns additional DOM attributes to the DOM tree directly at the client. |
+ | |||
+ | <blockquote> | ||
+ | ---- | ||
+ | Notice that if the widget's DOM output (<javadoc directory="jsdoc" method="redraw(_global_.Array)">zk.Widget</javadoc>) also has the same DOM attribute, both of them will be generated and it is technically not legal. Thus, you should prevent the DOM attributes that widget might output. | ||
+ | </blockquote> | ||
+ | |||
+ | For example, suppose you want to listen to the <code>onload</code> event, you can do as follows<ref>For more information, please refer to [[ZK Component Reference/Essential Components/Iframe#onload|ZK Component Reference: iframe]].</ref>. | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <iframe src="http://www.google.com" width="100%" height="300px" | ||
+ | xmlns:ca="client/attribute" | ||
+ | ca:onload="do_whater_you_want()"/> | ||
+ | </source> | ||
+ | |||
+ | |||
+ | If the attribute contains colon or other special characters, you can use the <code>attribute</code> element as follows. | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <div xmlns:ca="client/attribute"> | ||
+ | <attribute ca:name="ns:whatever"> | ||
+ | whatever_value_you_want | ||
+ | </attribute> | ||
+ | </div> | ||
+ | </source> | ||
+ | |||
+ | The other use of the client-attribute namespace is to specify attributes that are available only to certain browsers, such as accessibility and [http://www.section508.gov/index.cfm?FuseAction=Content&ID=12#Web Section 508]. | ||
+ | |||
+ | == Binding to client attribute from MVVM view model == | ||
+ | |||
+ | Client-attributes are added to the rendering information of components, and must be follow the same rules as the special attributes. | ||
+ | |||
+ | The client attribute must be initialized using the `${value}` syntax, and doesn't support `@init`, `@load` or `@bind`. | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <!-- "forEach" versus children binding --> | ||
+ | <div xmlns:ca="client/attribute"> | ||
+ | <!-- correct use for non-dynamic attribute values --> | ||
+ | <checkbox ca:attribute="${vm.value}" /> | ||
+ | <!-- binding a referenced value or dynamic value by recreating content after triggering a binding using shadow element apply --> | ||
+ | <apply refvalue="@load(vm.value)"> | ||
+ | <!-- apply content is recreated when the binding expression "vm.value" is notified --> | ||
+ | <!-- using ${value} is correct, since expression is re-evaluated once the apply content is recreated --> | ||
+ | <checkbox ca:attribute="${refvalue}" /> | ||
+ | </apply> | ||
+ | </div> | ||
+ | </source> | ||
+ | |||
+ | == Data-Attribute Handler == | ||
+ | Developer can define their own data-handler for the client attribute to have an extra functionality. | ||
+ | For example, (jQuery's mask) | ||
+ | |||
+ | '''Zul File:''' | ||
+ | <source lang="xml"> | ||
+ | <textbox xmlns:ca="client/attribute" ca:data-mask="00:00:00" onChange='Clients.log(self.value)'/> | ||
+ | </source> | ||
+ | |||
+ | '''zk.xml:''' | ||
+ | <source lang="xml"> | ||
+ | <client-config> | ||
+ | <data-handler> | ||
+ | <name>mask</name><!-- the attribute name, i.e. data-mask --> | ||
+ | <script src="http://igorescobar.github.io/jQuery-Mask-Plugin/js/jquery.mask.min.js" /> | ||
+ | <script> | ||
+ | function (wgt, dataValue) { | ||
+ | jq(wgt.$n()).mask(dataValue); | ||
+ | |||
+ | // unformat after onChange event. | ||
+ | wgt.listen({onChange: function (event) { | ||
+ | event.data.value = jq(this.$n()).cleanVal(); | ||
+ | }}); | ||
+ | } | ||
+ | </script> | ||
+ | </data-handler> | ||
+ | </client-config> | ||
+ | </source> | ||
+ | |||
+ | === Syntax Definition === | ||
+ | * '''<data-handler>''': a group of a data-attribute handler <ref name="required">Required</ref> <ref name="multiple">One or Many</ref> | ||
+ | ** '''<name>''': the attribute name. (i.e. data-name) <ref name="required"/> | ||
+ | ** '''<override>''': true means the handler is used to override another existing one. <ref name="optional">Optional</ref> | ||
+ | ** '''<link>''': the url for extra CSS files <ref name="multiple"/><ref name="optional"/> | ||
+ | ** '''<script>''' the script content <ref name="required">Required</ref> <ref name="multiple">One or Many</ref> | ||
+ | *** '''<script src="foo.js">''' the src attribute for the script (Javascript library or data-handler script), it can be a url of a JS script from context-path or a url from class-path. For example, <pre><script-uri>~./myscript</script-uri></pre> | ||
+ | *** Notice that the last <code><script></code> tag should be your data-handler script. | ||
+ | |||
+ | To see more examples, please refer to [http://blog.zkoss.org/index.php/2015/08/25/zk8-simple-but-powerful-using-data-handler-api-to-work-with-front-end-technologies/ ZK8: Simple but Powerful; Using Data-handler API to Work with Front-End Technologies] and [https://github.com/zkoss/zk8-datahandler Github] (you can design your own data-attribute handler and contribute this project). | ||
+ | |||
+ | |||
+ | <blockquote> | ||
+ | ---- | ||
+ | <references/> | ||
+ | </blockquote> | ||
+ | {{ZUMLReferenceHeadingToc}} | ||
=Version History= | =Version History= | ||
− | + | {{LastUpdated}} | |
{| border='1px' | width="100%" | {| border='1px' | width="100%" | ||
! Version !! Date !! Content | ! Version !! Date !! Content | ||
|- | |- | ||
− | | | + | | 5.0.3 |
− | | | + | | July 2010 |
− | | | + | | The client-attribute namespace was introduced. |
+ | |- | ||
+ | | 8.0.0 | ||
+ | | May 2015 | ||
+ | | [http://tracker.zkoss.org/browse/ZK-2730 Support client data attributes handler] | ||
|} | |} | ||
{{ZUMLReferencePageFooter}} | {{ZUMLReferencePageFooter}} |
Latest revision as of 10:19, 15 August 2023
Name: client attribute Namespace: http://www.zkoss.org/2005/zk/client/attribute Namespace shortcut: client/attribute Java: LanguageDefinition.CLIENT_ATTRIBUTE_NAMESPACE
It is the reserved namespace for specifying client-side DOM attributes. Unlike the client namespace, which assigns something to widgets, the client/attribute namespace assigns additional DOM attributes to the DOM tree directly at the client.
Notice that if the widget's DOM output (Widget.redraw(Array)) also has the same DOM attribute, both of them will be generated and it is technically not legal. Thus, you should prevent the DOM attributes that widget might output.
For example, suppose you want to listen to the onload
event, you can do as follows[1].
<iframe src="http://www.google.com" width="100%" height="300px"
xmlns:ca="client/attribute"
ca:onload="do_whater_you_want()"/>
If the attribute contains colon or other special characters, you can use the attribute
element as follows.
<div xmlns:ca="client/attribute">
<attribute ca:name="ns:whatever">
whatever_value_you_want
</attribute>
</div>
The other use of the client-attribute namespace is to specify attributes that are available only to certain browsers, such as accessibility and Section 508.
Binding to client attribute from MVVM view model
Client-attributes are added to the rendering information of components, and must be follow the same rules as the special attributes.
The client attribute must be initialized using the `${value}` syntax, and doesn't support `@init`, `@load` or `@bind`.
<!-- "forEach" versus children binding -->
<div xmlns:ca="client/attribute">
<!-- correct use for non-dynamic attribute values -->
<checkbox ca:attribute="${vm.value}" />
<!-- binding a referenced value or dynamic value by recreating content after triggering a binding using shadow element apply -->
<apply refvalue="@load(vm.value)">
<!-- apply content is recreated when the binding expression "vm.value" is notified -->
<!-- using ${value} is correct, since expression is re-evaluated once the apply content is recreated -->
<checkbox ca:attribute="${refvalue}" />
</apply>
</div>
Data-Attribute Handler
Developer can define their own data-handler for the client attribute to have an extra functionality. For example, (jQuery's mask)
Zul File:
<textbox xmlns:ca="client/attribute" ca:data-mask="00:00:00" onChange='Clients.log(self.value)'/>
zk.xml:
<client-config>
<data-handler>
<name>mask</name><!-- the attribute name, i.e. data-mask -->
<script src="http://igorescobar.github.io/jQuery-Mask-Plugin/js/jquery.mask.min.js" />
<script>
function (wgt, dataValue) {
jq(wgt.$n()).mask(dataValue);
// unformat after onChange event.
wgt.listen({onChange: function (event) {
event.data.value = jq(this.$n()).cleanVal();
}});
}
</script>
</data-handler>
</client-config>
Syntax Definition
- <data-handler>: a group of a data-attribute handler [2] [3]
- <name>: the attribute name. (i.e. data-name) [2]
- <override>: true means the handler is used to override another existing one. [4]
- <link>: the url for extra CSS files [3][4]
- <script> the script content [2] [3]
- <script src="foo.js"> the src attribute for the script (Javascript library or data-handler script), it can be a url of a JS script from context-path or a url from class-path. For example,
<script-uri>~./myscript</script-uri>
- Notice that the last
<script>
tag should be your data-handler script.
- <script src="foo.js"> the src attribute for the script (Javascript library or data-handler script), it can be a url of a JS script from context-path or a url from class-path. For example,
To see more examples, please refer to ZK8: Simple but Powerful; Using Data-handler API to Work with Front-End Technologies and Github (you can design your own data-attribute handler and contribute this project).
Version History
Version | Date | Content |
---|---|---|
5.0.3 | July 2010 | The client-attribute namespace was introduced. |
8.0.0 | May 2015 | Support client data attributes handler |