我需要什么,服务器端,实现商店并使其作为Observable工作?客户端怎么样?
文档说http://dojotoolkit.org/reference-guide/1.7/dojo/store/Observable.html
If you are using a server side store like the JsonRest store,you will need to provide a queryEngine in order for the update objects to be properly included or excluded from queries. If a queryEngine is not available,observe listener will be called with an undefined index.
但是,我不知道他们的意思.我自己从未创建过商店,并且我对queryEngine并不是很熟悉(说实话,我觉得它有点令人困惑).为什么需要queryEngine? doc是什么意思“未定义索引”?你如何为JsonRest商店编写一个queryEngine?我不应该为可观察的REST商店使用某种Web套接字,因为其他用户也可能会更改数据吗?
困惑!
解决方法
1)JsonRest的服务器端实现
在实现server side of JsonRest Store时有一个相当不错的写法.它准确显示了JsonRest将生成什么标头以及其余将包含哪些内容.它有助于形成JsonRest api如何转换为HTTP的心智模型.
2)查询引擎
在同一页面的早些时候,解释了how query() works client side.基本上,query()函数需要能够接收对象文字(例如:{title:’Learning Dojo’,categoryid:5})并返回商店中符合这些条件的对象. “在商店中”意味着已经加载到客户端的内存中,而不是在服务器上.
根据您要做的事情,可能无需编写您自己的queryEngine – 如果您正在构建自己的自定义商店,只需使用built-in SimpleQueryEngine即可.引擎只需要传递一个对象文字,它会为你添加整个dojo query()api.
3)可观察者
我的理解是Observables监视客户端对象集合中的更改(例如:添加或删除结果),甚至是特定对象内的更改(例如:post 5更改了标题).它不监视服务器端发生的更改.它只是提供一种机制来通知客户端应用程序的其他方面数据已更改,以便页面的所有方面保持同步.
在标题为“收集数据绑定”和“对象数据绑定:道场/有状态”的标题下,有一整篇文章在using Observables上写完.
4)并发
为了使客户端数据与服务器端数据保持同步,您需要做两件事:a)轮询服务器上其他用户的更改,b)使用事务将数据发送到服务器.
a)要轮询数据的更改,您需要让对象存储库跟踪变量中的活动查询.然后,使用setTimeout()或setInterval()每隔一段时间再次在后台运行查询.确保应用程序的小部件或其他方面使用Observables来监视它们所依赖的查询结果集中的更改.这样,其他用户对服务器的更改将自动反映在整个应用程序中.
b)使用事务来组合必须组合的动作.然后,确保服务器发回HTTP 200状态代码(意思是“它工作!”).如果事务在400s中返回HTTP状态,那么它由于某种原因不起作用,并且您需要重新查询数据,因为后端发生了某些变化.例如,您要更新的记录已删除,因此您无法更新它.在“交易”标题下还有一个write up on transactions