dijit/Tree在连接到dojo/store/JsonRest时不更新



我已经修改了dojo教程http://dojotoolkit.org/documentation/tutorials/1.10/store_driven_tree/demo/demo.html从JsonRest存储读取。

问题是,树显示不更新,当我点击"添加新的子选择项目",例如在根元素,虽然更新工作在原来的教程。

我比较了dojo/store/Memory(来自原始教程)和dojo/store/JsonRest在"put"请求后返回的内容:Memory返回新对象的id。JsonRest以"return xhr(…)"结尾,所以它返回一个Deferred而不是新的id,这似乎不能被Observable理解。我可以让它工作,如果我改变dojo/store/JsonRest.js结束:

  ...
  return xhr(...).then(function(data){
    return data.id;
  };
}

我希望有一个解决方案不修改道场的源代码?!

详细信息如下:

这是my store的定义,而不是原来的Memory store:

var governmentStore = new JsonRest({
  target : "http://localhost:8080/test/gov",
  getChildren : function(object) {
    return this.query({
      parent : object.id
    });
  }
 });
 var governmentStore = new Cache(governmentStore,new Memory({}));

(如果我删除缓存并直接使用JsonRest,即使修改的JsonRest.js也不会使树更新)。

这是一个PUT请求对json服务器的回复:

{"name":"New Child", "id":0.7243958345}

请帮助允许dijit/Tree对底层JsonRest存储的变化做出反应,而不会弄乱dojo源。

谢谢

多米尼克

尝试用Observable包装器包装JsonRest存储,看看这是否有助于正确更新树。还要确保树的模型正常运行,因为它应该通过监听store来处理树何时何地更新。

var memStore = new Memory({});
var store = new Observable(memStore); //Use this store for your tree
var cacheStore = new Cache(governmentStore,memStore);

这里的想法是,当您执行PUT操作时,应该将其放入cacheStore而不是governmentStore。缓存将对governmentStore执行PUT操作,但当PUT操作完成时,也会更新memStore,然后触发Observable中的通知,并将该信息传递给树。

使用jquery代替dojo是解决方案。我发现我可以在学习jquery的几个小时内解决使用dojo时出现的所有问题。这主要是由于两个库的文档质量,也因为dojo似乎有太多的错误,无法对新的错误报告做出反应。

相关内容

  • 没有找到相关文章

最新更新