javascript - 自动刷新 dgrid 内容

标签 javascript dojo dgrid

我正在使用 dgrid OnDemandGrid 来显示来自 Dojo JsonRest 存储的数据。这很好用,但我希望网格自动显示更改的数据。实现基于推送的方法(服务器告诉所有客户端哪些数据已更改)需要付出太多努力,因此我正在寻找基于客户端的解决方案。使用 dgrid 的 refresh() 没有用,因为这会导致闪烁并重置整个网格。

到目前为止,我最好的猜测是定期从第二个商店实例中获取所有数据,将其与实时商店实例进行比较,并使用 Observable 商店包装器将任何更改的数据通知网格。

是否有更好、更优雅的解决方案?如果没有,我该如何做到最好?

编辑: 这种方法的问题是要知道哪些行当前显示在网格中。我的应用程序处理大量数据,因此在两个 dojo 商店中同步整个数据集不是一个好主意。有没有办法知道网格中当前显示了哪些行?理想情况下,网格会定期重新请求当前显示的行的数据。不会那么难吧?

edit2:到目前为止,我最好的方法是“破解”Observable 存储,跟踪所有对observe 的调用。然后我会定期重新执行观察到的查询并将更改合并到实时存储中。 问题是 dgrid 保持太多的观察者开放,因此无法顺利进行。它关闭了其中一些,所以我的代码没有错误,我将 farOffRemoval 设置为 500(也尝试过降低和提高)。

到目前为止,这是我的代码:https://gist.github.com/3225927

它还没有完成,但它显示了足够的调试信息来说明问题出在哪里。由于可能没有人想要设置它并且 jsfiddle 上没有 dgrid,我可以告诉你在 1000 个条目网格中滚动后大约有 10-15 个观察者和 observerStats.abs(至少观察到的所有行的计数once) 大约是 750。

最佳答案

您可以使用一些 CacheStore,您只需定期刷新(关闭/销毁)

http://dojotoolkit.org/reference-guide/1.7/dojo/store/Cache.html

基本上,您清理 CacheStore,然后重做您的查询。

关于javascript - 自动刷新 dgrid 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11730215/

相关文章:

javascript - Dojo:工具提示延迟

javascript - Dojo dgrid 更新一行

css - 带水平滚动的 dgrid

javascript - 简单代码既不能在 jsfiddle 也不能在 codepen 上运行,而是在我的浏览器 (Chrome) 上运行?

php - chrome.extension 和 $.post()

javascript - $(e.target) 是 <i></i> 而不是包含的 <div>...</div>

javascript - 重置 document.ready ($.getScript)

javascript - Rally:StandardCardRenderer 中的清空 RevisionHistory

javascript - DojoToolkit widget.placeAt() 方法引用

javascript - 如何解决 dgrid 中的 DefineAlreadyDefined 问题?