ZK6の新しいツリーバインディングメカニズムを使用したモデルバインディングに関して問題があります。まず、私のコードは次のとおりです。
ズール:
<div id="win" apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('mira.web.composer.PermissionDesignerModel')"
style="width:98%; text-align:center;" vflex="1">
<tree id="permissionTree" width="100%" model="@bind(vm.treeModel)"
style="text-align:left;" vflex="2">
<treecols>
<treecol label="Item" width="400px" />
<treecol label="Typ" />
<treecol label="Ausgabe" />
<treecol label="Einfügen" width="100px" />
</treecols>
<template name="model" var="node">
<treeitem open="@bind(node.open)">
<treerow>
<treecell>
<textbox value="@bind(node.data.name)" />
</treecell>
<treecell>
<combobox mold="rounded" readonly="true"
model="@load(vm.allAttributeTypes)"
selectedIndex="@bind(node.data.attType)">
<template name="model">
<comboitem label="@load(each.name)"
value="@load(each.id)" />
</template>
</combobox>
</treecell>
<treecell>
<checkbox label="Ausgabe"
checked="@bind(node.data.isOutput)" />
</treecell>
<treecell>
<button label="Einfügen"
onClick="@command('insertNode', node=node)" />
</treecell>
</treerow>
</treeitem>
</template>
</tree>
モデル:
public class PermissionDesignerModel {
ClassPathResource res = new ClassPathResource("/beans.xml");
BeanFactory beanFactory = new XmlBeanFactory(res);
private PermissionTreeModel treeModel;
@Command
public void insertNode(@BindingParam("node") PermissionTreeNode node) {
node.setOpen(false);
}
public PermissionTreeModel getTreeModel() throws ParseException {
if (treeModel == null) {
PermissiontreeBuilder builder = new PermissiontreeBuilder(Container
.getCurrentProduct().getProductId());
PermissionTreeNode root = builder.getRoot();
setTreeModel(new PermissionTreeModel(root));
}
return treeModel;
}
public void setTreeModel(PermissionTreeModel treeModel) {
this.treeModel = treeModel;
}
}
insertNode()メソッドが正しく呼び出され、コンテンツを含む適切なノードを取得しますが、ノード(またはopen-attribute)のデータを変更しても、UIで何も起こりません。モデルの変更をツリーで有効にするには、特別なbind()メソッドなどを呼び出す必要がありますか?