基于 ItemFileReadStore 和 parent-based 模型的 Dojo 树
Dojo Tree based on ItemFileReadStore and parent-based model
我正在尝试以编程方式从 json 文件创建 dojo 树。问题是我的 json objects 引用了他们的 parents 而不是某些示例中的 children 。
不幸的是我的输出看起来像这样:
我有以下 javascript 代码:
<script type="text/javascript">
require(["dijit/Tree", "dojo/data/ItemFileReadStore", "dijit/tree/ForestStoreModel", "dijit/tree/ObjectStoreModel", "dojo/domReady!"],
function(Tree, ItemFileReadStore, ObjectStoreModel, ForestStoreModel){
var store = new ItemFileReadStore({
url: "/_data/test.json",
getChildren: function(object){
return this.query({F_TopLevelCategoryID: object.P_CategoryID});
}
});
var myModel = new ObjectStoreModel({
store: store,
labelAttr:'CategoryName',
query: {"P_CategoryID": 0}
});
var myTree = new Tree({
model: myModel
}, "treeOne");
myTree.startup();
});
</script>
json 文件如下所示:
{ "identifier" : "P_CategoryID",
"label" : "CategoryName",
"items" : [ { "CategoryName" : "Category 1",
"F_TopLevelCategoryID" : 0,
"P_CategoryID" : 1
},
{ "CategoryName" : "Category 2",
"F_TopLevelCategoryID" : 1,
"P_CategoryID" : 2
},
{ "CategoryName" : "Category 3",
"F_TopLevelCategoryID" : 1,
"P_CategoryID" : 3
},
{ "CategoryName" : "Category 4",
"F_TopLevelCategoryID" : 1,
"P_CategoryID" : 4
},
{ "CategoryName" : "Category 5",
"F_TopLevelCategoryID" : 3,
"P_CategoryID" : 5
},
{ "CategoryName" : "Category 6",
"F_TopLevelCategoryID" : 4,
"P_CategoryID" : 6
},
{ "CategoryName" : "Category 7",
"F_TopLevelCategoryID" : 4,
"P_CategoryID" : 7
},
{ "CategoryName" : "Category 8",
"F_TopLevelCategoryID" : 0,
"P_CategoryID" : 8
},
{ "CategoryName" : "Top Level Category",
"P_CategoryID" : 0
}
]
}
问题出在哪里?
我认为您收到部分结果是侥幸。
您在 require 块中调换了 forestStoreModel 和 objectStoreModel,引用父级就可以了!
此外,使用 dojo/store 代替 ItemFileReadStore,因为后者已被弃用。在内存上使用数据参数:
var store = new Memory({
data: testJson,
getChildren: ...
});
在这里查看我的工作 fiddle,使用 dojo/store/内存:https://jsfiddle.net/yubp45sa/
您可以使用 dojo/request:
将数据存入内存
request("testData.json").then(...);
http://dojotoolkit.org/reference-guide/1.10/dojo/request.html
我之前有另一个请求示例,它通过来自自定义 nodeJS 路由的 GET 请求数据(返回 JSON):
request.get("/configInfo", {
handleAs: "json"
}).then(...);
我正在尝试以编程方式从 json 文件创建 dojo 树。问题是我的 json objects 引用了他们的 parents 而不是某些示例中的 children 。 不幸的是我的输出看起来像这样:
我有以下 javascript 代码:
<script type="text/javascript">
require(["dijit/Tree", "dojo/data/ItemFileReadStore", "dijit/tree/ForestStoreModel", "dijit/tree/ObjectStoreModel", "dojo/domReady!"],
function(Tree, ItemFileReadStore, ObjectStoreModel, ForestStoreModel){
var store = new ItemFileReadStore({
url: "/_data/test.json",
getChildren: function(object){
return this.query({F_TopLevelCategoryID: object.P_CategoryID});
}
});
var myModel = new ObjectStoreModel({
store: store,
labelAttr:'CategoryName',
query: {"P_CategoryID": 0}
});
var myTree = new Tree({
model: myModel
}, "treeOne");
myTree.startup();
});
</script>
json 文件如下所示:
{ "identifier" : "P_CategoryID",
"label" : "CategoryName",
"items" : [ { "CategoryName" : "Category 1",
"F_TopLevelCategoryID" : 0,
"P_CategoryID" : 1
},
{ "CategoryName" : "Category 2",
"F_TopLevelCategoryID" : 1,
"P_CategoryID" : 2
},
{ "CategoryName" : "Category 3",
"F_TopLevelCategoryID" : 1,
"P_CategoryID" : 3
},
{ "CategoryName" : "Category 4",
"F_TopLevelCategoryID" : 1,
"P_CategoryID" : 4
},
{ "CategoryName" : "Category 5",
"F_TopLevelCategoryID" : 3,
"P_CategoryID" : 5
},
{ "CategoryName" : "Category 6",
"F_TopLevelCategoryID" : 4,
"P_CategoryID" : 6
},
{ "CategoryName" : "Category 7",
"F_TopLevelCategoryID" : 4,
"P_CategoryID" : 7
},
{ "CategoryName" : "Category 8",
"F_TopLevelCategoryID" : 0,
"P_CategoryID" : 8
},
{ "CategoryName" : "Top Level Category",
"P_CategoryID" : 0
}
]
}
问题出在哪里?
我认为您收到部分结果是侥幸。
您在 require 块中调换了 forestStoreModel 和 objectStoreModel,引用父级就可以了!
此外,使用 dojo/store 代替 ItemFileReadStore,因为后者已被弃用。在内存上使用数据参数:
var store = new Memory({
data: testJson,
getChildren: ...
});
在这里查看我的工作 fiddle,使用 dojo/store/内存:https://jsfiddle.net/yubp45sa/
您可以使用 dojo/request:
将数据存入内存request("testData.json").then(...);
http://dojotoolkit.org/reference-guide/1.10/dojo/request.html
我之前有另一个请求示例,它通过来自自定义 nodeJS 路由的 GET 请求数据(返回 JSON):
request.get("/configInfo", {
handleAs: "json"
}).then(...);