im newbie in zk´s world, so i have a doubt... i read already zk 8 documentation (almost all). At the office some partners are using ViewModel but inside some components are using Composer (selectorComposer) to bind some elements like this:
<div apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('com.some.package.SomeViewModel')">
<vbox>
... SOME ANOTHER ELEMENTS ....
<div apply="com.some.package.SomeComposer">
<hbox>
<vbox>
<checkbox ... more code...
</checkbox>
</vbox>
</hbox>
</div>
</vbox>
</div>
i read that if you apply SelectorComposer you lost coupling... so what is the reason of taking SelectComposer within a ViewModel? or how it works?
Thanks a lot for any help.
From my point of view SelectComposer
allow you to reuse java code in a very traditional way. For example you can defined an AbstractController
with functionality that will be reused in other controls of the same type with an slightly different functionality and extend the AbstractController
. In this approach you can control the lifecycle of the componente by implemented the methods of SelectComposer
like doAfterCompose
.
But actually you can do the same thing with pure MVVM, but instead of implement methods of SelectComposer
you should use the annotations like @AfterCompose
or @Init
and you can extend the base class as well, to use your view you just have to change the tag in the zul file with something like:
<include src="/artifacts/componente_to_reuse.zul"/>
I think is just a matter of preferences, I preferred (and I always recommend) to use pure MVVM since it was available, and I haven't found any functionality that I couldn't reuse with MVVM approach.
References: Include, Zk annotations