我有一个使用作曲家的视图,其中有5个columnChildren,每个都是一个也使用作曲家的macroComponent的parentComponent。
MyView.zul有5个columnChildrens
<window id="win" apply='com.MyComposerController'>
<portallayout maximizedMode="whole">
<portalchildren style="padding:5px" width="50%">
<panel sclass="innerPanel" border="normal">
<panelchildren>
<columnlayout>
<columnchildren id='columnChildrenForInfo'/><!-PARENT FOR THE MACROURI TEMPLATE->
</columnlayout>
</panelchildren>
</panel>
<panel sclass="innerPanel" border="normal">
<panelchildren>
<columnlayout>
<columnchildren id='columnChildrenForPetition'/><!-PARENT FOR THE MACROURI TEMPLATE->
</columnlayout>
</panelchildren>
</panel>
<panel sclass="innerPanel" border="normal">
<panelchildren>
<columnlayout>
<columnchildren id='columnChildrenForErrors'/><!-PARENT FOR THE MACROURI TEMPLATE->
</columnlayout>
</panelchildren>
</panel>
</portalchildren>
<portalchildren style="padding:5px" width="50%">
<panel sclass="innerPanel" border="normal">
<panelchildren>
<columnlayout>
<columnchildren id='columnChildrenForEsperaNoAtendidos'/><!-PARENT FOR THE MACROURI TEMPLATE->
</columnlayout>
</panelchildren>
</panel>
<panel sclass="innerPanel" border="normal">
<panelchildren>
<columnlayout>
<columnchildren id='columnChildrenForDocs'/><!-PARENT FOR THE MACROURI TEMPLATE->
</columnlayout>
</panelchildren>
</panel>
</portalchildren>
</portallayout>
后来我在每个列中创建了以下macroUri模板 MyViewDetail.zul
<zk>
<panel>
<panelchildren>
<listbox id="results" style="margin-right:5px;margin-top:5px;margin-left:5px">
<listhead>
<listheader/>
<listheader/>
<listheader/>
</listhead>
<template name="model">
<listitem onClick='$composer.listitemOnClick(event);'>
<listcell/>
<listcell/>
<listcell/>
</listitem>
</template>
</listbox>
</panelchildren>
</panel>
</zk>
这个macroComponent映射在lang-addon.xml中,就像这个
一样<component>
<component-name>composerDetailController</component-name>
<component-class>DetailController</component-class>
<macro-uri>myViewDetail.zul</macro-uri>
</component>
详细的作曲家也是一个春天的豆子,我会像这样检索
<bean id="composerDetailControllerBean" class="...." autowire="byName" scope="prototype"/>
我这样绑定它。
final DetailController composerDetailControllerBean = (DetailController)SpringUtil.getBean("composerDetailControllerBean");//EXTRACT IT FROM SPRING CONTAINER
composerDetailControllerBean.setParent(columnChildren);//EACH DETAIL CONTROLLER HAS A COLUMN CHILDREN AS A PARENT
detail.afterCompose();
detail.inicializa();//SOME BUSINESS LOGIC
一切都像魅力一样,但我有一个问题,因为你可以在模板中看到有一个没有id的listitem,因为如果我把一个id一个NONUNIQUEIDINSPACE异常被抛出但我需要听onClick方法,我尝试了以下
onClick='$composer.listitemOnClick(event);'
但是作曲家变量把它指向第一个作曲家,我的意思是MyView.zul作曲家,我有模板作曲家DetailController中的方法和业务逻辑但是我不这样做
<div id="compA" apply="some.package.ComposerA">
<div id="compB" apply="some.package.ComposerB"/> i dont use apply in the detailComposer i bind it through lang-addon.xml file
</div>
<div apply="some.package.ComposerA">
<custom-attributes composerName="myCompA"/>i dont use apply in the detailComposer i bind it through lang-addon.xml file i cannot use customAttributes
</div>
我的意思是我没有为详细作曲家设置一个明确的名字,我不知道如何在zul代码中将它引用到它
我无法将作曲家名称映射到变量我唯一想做的就是尝试使用自定义属性设置composerName尝试通过上述自定义属性完成自定义名称
lang-addon.xml文件
<component>
<component-name>composerDetailController</component-name>
<component-class>DetailController</component-class>
<macro-uri>myViewDetail.zul</macro-uri>
<custom-attribute>
<attribute-name>composerName</attribute-name>
<attribute-value>composerDetail</attribute-value>
</custom-attribute>
</component>
'$composerDetail.listitemOnClick(event);'
尝试在lang-addOn中映射自定义属性名称并在zul中使用它但没有成功。
我得到的原因是:源文件:内联评估:$composerDetail.listitemOnClick(event);'' : Attempt to resolve method: listitemOnClick() on undefined variable or class name: $composerDetail : at Line: 14 : in file: inline evaluation of:
$ composerDetail.listitemOnClick(event);&#39;&#39; :$ composerDetail .listitemOnClick(event)
我也在MyViewDetail.zul中尝试这个
<zk>
<custom-attributes composerName="composerDetail"/>
</zk>
但是也不行。
在简历中,我不知道为detailComposer设置名称,我不能在MyViewDetail.zul中使用它