Dojo Memory Store定期刷新

时间:2015-04-09 18:17:31

标签: javascript dojo

我有一个dojo方法来使xhrRequest从DB获取最新的项目列表,并使用setInterval()定期执行。有没有其他更好的方法,如果没有使用setInterval(),只要将新项目添加到数据库中就会自动更新内存存储?当前代码位于

之下
<div data-dojo-type="dojo/store/Memory"
             data-dojo-id="dataStore">
            <script type="dojo/method">  
var myStore = this;
setInterval(function(){ 
require(["dojo/request/xhr"], function(xhr){
  xhr("myurl", {
    handleAs: "json"
  }).then(function(data){
if (data && data.length > 0) {   
                        myStore.setData(data);
                        }
  }, function(err){
    // Handle the error condition
  }, function(evt){
    // Handle a progress event from the request if the
    // browser supports XHR2
  });
});
}, 2000);                  
            </script>
        </div>

1 个答案:

答案 0 :(得分:1)

好吧,您可以使用dojo/store/JsonRest代替dojo/store/Memory。如果您确实需要更新信息,那么每次要获取数据时都应该调用"myurl",这样就不必轮询服务器进行更改。

如果您没有RESTful API,并且您不愿意实施自己的dojo/store商店(也可能是这种情况),那么您可能需要考虑一下的WebSockets。

您的方法存在的问题是它非常耗费网络(当然,如果有很多客户端)。如果服务器可以将消息推送到客户端,说数据库已经更改并且他们必须更改其商店,那将更有意义。

这与Meteor等平台的工作方式类似,他们使用WebSockets将服务器端数据库(部分)同步到客户端商店。

但是,并非所有浏览器都支持WebSockets(caniuse.com),但大多数框架都提供了一个服务器+客户端组件,可以使用相同的回退(例如,长轮询)。

请查看Real-time Stores文章,该文章对此进行了详细解释。