Java ZK拖放和数据绑定

Java ZK拖放和数据绑定,java,web,zk,Java,Web,Zk,我对ZK绑定和拖放功能有问题。 我有两个列表框: <listbox id="left" width="100%" model="@load(vm.contacts)" height="200px" draggable="true" droppable="true" onDrop="@command('move')"> <listhead> <listheader label="Contatto" a

我对ZK绑定和拖放功能有问题。 我有两个列表框:

<listbox id="left" width="100%" model="@load(vm.contacts)" height="200px" draggable="true" droppable="true" onDrop="@command('move')">                      
    <listhead>
        <listheader label="Contatto" align="center"  />
    </listhead>
    <template name="model" var="contact">
        <listitem value="@bind(contact)" draggable="true" droppable="true" onDrop="@command('move')"> 
           <listcell src="/img/contact-icon_x32.jpg" label="@load(contact.person.surname.concat(' ').concat(contact.person.name))" />
        </listitem>
    </template>
</listbox>
...
<listbox width="100%" id="right" model="@load(vm.contactsQuickKey)" height="250px" draggable="true" droppable="true" onDrop="@command('move')" >
    <listhead>
         <listheader label="Etichetta" align="center"  />
         <listheader label="Contatto" align="center"  />
    </listhead>
    <template name="model" var="contactQuickKey">
         <listitem value="@bind(contactQuickKey)" draggable="true" droppable="true" onDrop="@command('move')">
             <listcell>                                   
                 <textbox width="90%" value="@load(contactQuickKey.label) @save(contactQuickKey.label, before={'move', 'saveData', 'setLeftActivePage'})"/>
             </listcell>
             <listcell src="/img/contact-icon_x32.jpg" label="@load(contactQuickKey.contact.person.surname.concat(' ').concat(contactQuickKey.contact.person.name))" />
         </listitem>
    </template>
</listbox>

...
如果我编辑右侧列表框中的文本框,然后在不单击任何位置的情况下,立即从左侧拖放一个单元格,我添加的文本将消失。 保存文本的唯一方法是使用onchange事件,但它非常繁重

编辑: 我在这里创建了一个工作演示

有谁能给我一个更好的解决方案吗

多谢各位

解决方案

我在文本框中添加了“instant=“true”,这就解决了我的问题


感谢你们所有人对我的帮助

您的问题是,您的文本没有加载到服务器端
文本框

您可以通过
before={'move'…
在拖放前保存,但无法将其加载到
文本框
,因为这需要一个
notifyChange
,在
执行命令('move')
,这是不可能的,因为zk
执行周期和
move
导致保存的事实

您可以做的是,从您的
move
命令中使用vm类。但这可能是一个需要解决的问题
拖动的
Textbox
属于哪个
contactQuickKey
实例

顺便问一下,换车的问题在哪里?交通不应该是这样的

编辑 由于某些原因,如果
拖动前不会发生其他用户操作。

可能是一个bug?

解决方案是将
文本框。这解决了通过拖放操作丢失文本修改的问题。

更改速度非常慢,如果我使用backspace键删除大量文本,然后尝试写入其他文本,我不知道为什么,但文本框会失去焦点。可能是因为在执行move命令之前没有保存文本可能是一个bug,但是我没有发现其他人有这个问题,所以我仍然怀疑我的代码中是否有错误。焦点问题可以通过检查空字符串的大小写来解决,如果是这样的话,可以调用
((Textbox)event.getTarget.focus())
如果字符串不是完全空的,情况也一样:文本框失去焦点。如果我停下来写一秒钟文本,也会发生这种行为。