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