了解最新技术文章
对于我的用例,我构建了一个嵌套树图布局,其中所有位置的计算都由位于 GoJS 之上的算法完成。该算法按照 GoJS 的预期返回一个 nodeDataArray,并包含 leftEdge、rightEdge、topEdge 和 bottomEdge 等维度数据。
然后将此数据传递给 GoJS,在自定义布局中,我只是创建具有这些尺寸的节点和组并相应地定位它们。
所以在解释问题之前,用例是,每当我扩展树图组时,整个树图的面积都会增加一些因子,因此我的自定义算法会重新计算新维度。
现在我有了新的维度,我希望将这些更改传播到 GoJS 以重新绘制图表。为此,我没有清除整个图表并从头开始重新创建它,而是在事务中提交了更改。
我之所以没有采用清空整个图表并重新创建的方法的原因是,图表本身有很多状态,比如哪些组被展开,哪些组被折叠,哪些被突出显示等等。这种方法,我必须将所有这些状态更改存储在我的组件中,这会破坏单一的事实来源,或者可能使用 ReplaySubject 类型的实现。
因此,在事务中提交更改更有意义。这也将为将来可能需要的任何动画打开大门。
所以,现在的问题是,我正在提交更改,两次甚至三次检查算法是否提供了正确的尺寸。出于某种原因,GoJS 没有在正确的位置创建节点。
这有点奇怪,因为我展开节点的顺序也改变了 GoJS 在画布中渲染节点的方式。
例如:
在这种情况下,左下角的 Audit Invoice 1 节点在其父节点(绿色组)之外呈现。
但不知何故,当我展开左上角的绿色组时,它固定了它的位置:
我已经检查了传递给 GoJS 的维度,它们实际上在这两种情况下都是正确的。我觉得我将更改提交到 GoJS 的方式存在一些问题。
您可以放心地忽略isCollapse
并假设它在我在图表中的操作期间始终为假
上一篇:没有了!