dojo.store.Observable,JSON REST和queryEngine

Mer*_*erc 7 javascript ajax dojo datastore restful-architecture

有没有人知道如何在dojo中使用带有Observable weapon的dojo中的JsonRest存储,就像在dojo.store.Observable中那样?

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

如果您使用的服务器端存储(如JsonRest存储),则需要提供queryEngine才能正确地包含或排除查询中的更新对象.如果queryEngine不可用,则将使用未定义的索引调用observe侦听器.

但是,我不知道他们的意思.我自己从未创建过一个商店,并且我对queryEngine并不是很熟悉(说实话,我觉得它有点令人困惑).为什么需要queryEngine?doc是什么意思"未定义索引"?你如何为JsonRest商店编写一个queryEngine?我不应该为可观察的REST存储使用某种Web套接字,因为其他用户也可能会更改数据吗?

困惑!

Rus*_*ore 4

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

1)JsonRest的服务端实现

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

2)查询引擎

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

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

3) 可观察到的数据

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

在“集合数据绑定”和“对象数据绑定:dojo/Stateful”标题下有一篇关于使用 Observable 的完整文章。

4)并发性

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

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

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