将Dijit.Tree与QueryReadStore一起使用以进行延迟加载
||
我正在尝试将dojox.data.QueryReadStore用作延迟加载dijit.tree的存储。我似乎很难找到使用该存储库而不是JsonRestStore的示例,但是为了确保整个应用程序的一致性,我真的很想坚持使用查询字符串而不是REST语法。问题是,虽然我可以让QueryReadStore传递到树的根级别,而延迟加载子级,但它总是失败。
这是我所拥有的:
dojo.require(\"dojox.data.QueryReadStore\");
dojo.require(\"dijit.Tree\");
dojo.addOnLoad(function() {
var store = new dojox.data.QueryReadStore({
url:\'/cgi-bin/safari/safari_json_responder.pl\',
requestMethod: \"get\"
});
var treeModel = new dijit.tree.ForestStoreModel({
store: store,
deferItemLoadingUntilExpand: true,
query: { \'id\' : \"0\" },
childrenAttrs: [\"children\"]
});
var myTree = new dijit.Tree({
model: treeModel
},
\"treeOne\");
myTree.startup();
});
当我单击以展开具有孩子的类别之一时,我从Firebug收到此错误:
无法在层次结构的指定点处插入节点\“代码:\” 3
[解决此错误](function(){var _1 = null; if((_ 1 ||(typeo ... setTimeout(dojo._loadInit,100);}})();
关于什么可能有什么建议?您可以在此处查看实时测试页面:
http://asisaid.com/safari-resources/lazyLoad.html
更新的意见2011年6月19日:
我注意到isItemLoaded似乎声称在QueryReadStore中不完整。也许Dojo文档说QueryReadStore可以处理延迟加载是不正确的?我一直在尝试替换QueryReadStore.isItemLoaded方法,但是还没有弄清楚它应该做什么。我尝试查找属性\“ $ ref \”或\“ _ reference,\”,但这似乎不起作用。
显然,我做错了。尽管不知何故我感觉自己走对了。如果我可以通知模型某个项目没有完全加载,那么事情可能会按计划进行(并与JsonRestStore有关)。
这是当id = 0传递到服务器时正在输出的数据的样子:
{\"label\":\"name\",\"identification\":\"id\",\"items\":[{\"name\":\"Autobiographical\",\"poid\":\"0\",\"id\":\"3\"},{\"name\":\"Blogging\",\"poid\":\"0\",\"children\":[{\"name\":\"asisaid\",\"id\":\"2\",\"$ref\":\"2\"},{\"name\":\"blogware\",\"id\":\"4\",\"$ref\":\"4\"}],\"id\":\"1\",\"$ref\":\"1\"}, [...]
(为了避免太长,将其截断。)
我在这里和那里抛出了引用和数据,尝试了不同的事情(我肯定在这个示例中有太多东西,但是我一直在尝试抛出所有东西,看看有什么问题)。
对于id = 0,它最初看起来像这样:
{\"label\":\"name\",\"identification\":\"id\",\"items\":[{\"name\":\"Autobiographical\",\"poid\":\"0\",\"id\":\"3\"},{\"name\":\"Blogging\",\"poid\":\"0\",\"children\": \"true\",\"id\":\"1\",\"$ref\":\"1\"}, [...]
我也尝试过这个:
{\"label\":\"name\",\"identification\":\"id\",\"items\":[{\"name\":\"Autobiographical\",\"poid\":\"0\",\"id\":\"3\"},{\"name\":\"Blogging\",\"poid\":\"0\",\"children\": [{\"$ref\":\"2\" },{\"$ref\":\"4\"}],\"id\":\"1\"}, [...]
这些想法都没有(同样的事情,但是使用\“ _ reference \”代替\“ $ ref \”似乎可以解决问题)。
没有找到相关结果
已邀请:
1 个回复
葛瞎说漓
属性描述的问题,但是从查看
和
的源代码后,我看不到它如何工作,至少在1.6版中。另外,请参见http://bugs.dojotoolkit.org/ticket/5876。它说那里不需要引用,您可以直接传递id值。但是,我不确定它是否能正常工作。您可能需要继承
中的某些方法。 您的服务器脚本返回的
属性值无效。当它应该返回对其他项目或项目本身的引用列表时,返回10。由于在您的情况下,您希望将加载子项的时间推迟到扩展之前,因此
属性应该具有引用。请参阅《 Dojo参考指南》中的此页面。 就像是:
其中id
和
不一定在第一批数据中返回,但是可以通过对服务器执行新查询而在以后获取。 另外,“ 15”中的查询应该是返回根项的内容。
不是这样的条件。您可以向所有返回的项目添加虚拟属性“ 17”,并将其根设置为“ 10”。尽管ѭ16现在似乎可以工作,但是稍后当树需要重新查询根项目并且商店使用已加载的数据时,它可能会咬你。