我正在尝试在节点展开事件上实现元素的延迟加载。
这有一个问题。
因此,在展开事件中,我使用为展开的节点创建新项目
HierarchicalContainer.addItem()
但是这个方法调用
containerItemSetChange()
AbstractSelect 类的方法。那里
itemIdMapper.removeAll()
叫做。所以 map 被清理并且树的所有项目都在 map 中获得新的ID。当服务器的答案传到客户端时,它不知道这个新的 id ,因为它有(扩展节点的)以前的 id,因此不会添加新项目,也不会在客户端呈现。
我试过https://vaadin.com/forum/-/message_boards/view_message/131802 .但是,实际上,整个树的数据是从服务器发送到客户端的。我希望只发送特定节点所需的数据。所以没有性能“+”。
谁能帮我解决这个问题?提前致谢。
版
其实我也需要改变领域
partialUpdate
为真,因为首先服务器将树的所有内容发送到客户端。
最佳答案
解释你的问题;大多数人会假设树在您的对象上使用您的 hashcode/equals 实现(这就是它们存在的原因!)进行比较。你创建你的树,做很多其他的事情,包括修改你放在树中的项目,然后尝试使用这些项目作为键来修改树。
这就是问题所在。
当您调用 addItem()
时,树基本上会拍摄项目的哈希码快照。 .它在内部使用该哈希码将客户端工件映射到服务器上的对象。对于任何后续 removeItem()
等调用它只是使用快照的哈希码,而不是像任何其他普通容器一样调用对象的哈希码/等于方法。如果你通过 removeItem()
调试它你会很快看到问题所在。
树。但如果你这样做,你需要重建整棵树。
TreeNode
或其他东西)包含该项目但提供它自己的等于/哈希码
方法。
就像一个标准的 java 容器。就目前而言,这个古怪的
javadoc中没有提到行为的方法
会失败。
希望这可以帮助某人。
关于tree - 瓦丁树。延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773133/