这让我疯狂了一个周末,虽然我发现了一个似乎是可行的解决方案,但我的问题是使用Dojo / Dijit是否存在一些我缺失的基本原因。
问题在于:每当我创建一个页面,其中dgrid使用JsonRest存储并且位于TabContainer的隐藏选项卡中(一个不是最初选择的那个),我得到DOMExceptions并且有点搞砸了dgrid。特别是,dgrid在最后一行数据下面有一个很大的空白空间,滚动到dgrid数据的底部或顶部会抛出额外的DOMExceptions。
如果我点击其中一个列标题对dgrid进行排序,它会重置其布局并正常工作。如果dgrid在页面的可见部分而不是未选中的选项卡上初始化,那很好。如果我使用Memory存储而不是JsonRest,一切都很好(即使dgrid在隐藏选项卡中初始化)。如果dgrid在隐藏选项卡中初始化但没有存储,那么它很好(但是空的)。
基于证据,我猜测问题与JsonRest查询需要时间这一事实有关,并且由于某种原因在初始化时破坏了dgrid。我的解决方案是创建没有存储的dgrid,然后在显示包含dgrid的选项卡时设置存储。不过,这似乎很糟糕。我应该能够创建一个带有商店的dgrid,而不必在外部摆弄它。
所以,我的有点黑客解决方案是正确的(或至少是合理的)方法来处理用服务器提供的数据初始化隐藏的dgrid,或者是否有关于我的TabContainer + dgrid + JsonRest的设置我不见了?
答案 0 :(得分:1)
我对你的问题没有答案,但是Dijit小部件和容器之间存在一个关于小部件生命周期和启动的合同......特别是当元素被添加到DOM时,结束时,调用startup()
方法来布局和调整元素大小。 dgrid可能不参加。也许你可以将一些东西连接到TabContainer的启动方法,它将触发dgrid组件的布局?