7

有谁知道如何在 dojo 中使用 JsonRest 存储和 Observable weapper,就像 dojo.store.Observable 中的那样?

在服务器端,我需要什么来实现 store 并使其作为 Observable 工作?客户端呢?文档说http://dojotoolkit.org/reference-guide/1.7/dojo/store/Observable.html

如果您使用像 JsonRest 存储这样的服务器端存储,则需要提供一个 queryEngine 以便从查询中正确包含或排除更新对象。如果查询引擎不可用,则将使用未定义的索引调用观察侦听器。

但是,我不知道它们是什么意思。我自己从未创建过商店,也不是 100% 熟悉 queryEngine(老实说,我觉得这有点令人困惑)。为什么需要查询引擎?文档中的“未定义索引”是什么意思?以及如何为 JsonRest 存储编写查询引擎?我不应该为可观察的 REST 存储使用某种 Web 套接字,因为其他用户也可能更改数据?

使困惑!

4

1 回答 1

4

我意识到这个问题有点老了,但这里有一些信息供将来参考。由于这是一个多部分的问题,我将把它分成几个部分:

1)JsonRest的服务端实现

关于实现JsonRest Store 的服务器端有一篇相当不错的文章。它准确地显示了 JsonRest 将生成哪些标头以及其余部分将包含哪些内容。它有助于形成 JsonRest api 如何转换为 HTTP 的心理模型。

2) 查询引擎

在同一页面的前面,解释了 query() 如何在客户端工作。基本上,该query()函数需要能够接收对象文字(例如:){title:'Learning Dojo',categoryid:5}并返回存储中与这些条件匹配的对象。“在存储中”意味着已经加载到客户端的内存中,而不是服务器上。

根据您要执行的操作,可能不需要编写自己的查询引擎——如果您正在构建自己的自定义存储,只需使用内置的 SimpleQueryEngine 。引擎只需要传递一个对象字面量,它就会为您添加整个 dojo query() api。

3) 可观察的

我的理解是 Observables 监视对象集合中的客户端更改(例如:添加或删除结果)甚至在特定对象中(例如:post 5 已更改标题)。它不监视服务器端发生的更改。它只是提供一种机制来通知客户端应用程序的其他方面数据已更改,以便页面的所有方面保持同步。

在“Collection Data Binding”和“Object Data Binding: dojo/Stateful”标题下有一篇关于使用 Observables的完整文章。

4) 并发

为了使客户端数据与服务器端数据保持同步,您需要做两件事:a) 轮询服务器上其他用户的更改,b) 使用事务将数据发送到服务器。

a) 要轮询数据的更改,您需要让对象存储跟踪变量中的活动查询。然后,每隔一段时间使用setTimeout()setInterval()在后台再次运行查询。确保应用程序的小部件或其他方面使用 Observables 来监控它们所依赖的查询结果集的变化。这样,其他用户对服务器的更改将自动反映在整个应用程序中。

b) 使用事务来组合必须组合的动作。然后,确保服务器发回 HTTP 200 状态代码(意思是“它成功了!”)。如果事务在 400 秒内返回 HTTP 状态,那么由于某种原因它不起作用,您需要重新查询数据,因为后端发生了一些变化。例如,您要更新的记录已被删除,因此您无法对其进行更新。在“交易”标题下也有关于交易的文章

于 2013-01-23T18:18:20.747 回答