基于 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(...);