我有一个客户端应用程序,需要显示一个非常大的树(这是一个巨大的组织预算),可以通过JSON查询 - 每个预算部分都有一个代码,而主题1122是主题11的儿子和主题112233的父亲。
预算树以高级主题开头,我想要做的是:当用户点击主题节点(例如,“11”)时,它将为所有主题的儿子运行JSON查询“11”,然后用它们填充树。
到目前为止,我已经设法让查询用高级节点填充树,但是当你打开一个节点时,你再次获得相同的节点列表.. :(
XJSONDataSource yedaDS = new XJSONDataSource();
yedaDS.setDataURL("http://api.yeda.us/data/gov/mof/budget/?o=jsonp&query=%7B%22code%22%20:%20%7B%20%22$regex%22%20:%20%22%5E0020%22%20%7D%7D");
DataSourceTextField code = new DataSourceTextField("code","Code");
code.setPrimaryKey(true);
yedaDS.setTitleField("title");
DataSourceIntegerField year = new DataSourceIntegerField("year", "Year");
DataSourceTextField netAllocation = new DataSourceTextField("title","Title");
yedaDS.setFields(code,year,netAllocation);
TreeGrid remoteJsonQuery = new TreeGrid();
remoteJsonQuery.setDataSource(yedaDS);
remoteJsonQuery.setAutoFetchData(true);
HStack stack = new HStack();
stack.addMember(remoteJsonQuery);
stack.draw();
有什么想法吗?
答案 0 :(得分:1)
在您的情况下,您需要在DS中有3个主要内容 -
1)每行的Id字段,例如 - 112233
2)该行的父ID - 例如1122。您必须在此字段上添加外键关系。这就是你所缺少的
3)根值 - 11,告诉数据源哪个是根元素
作为code sample ,请查看此示例的数据源代码,重要的行是 -
DataSourceIntegerField employeeIdField = new DataSourceIntegerField("EmployeeId", "Employee ID");
employeeIdField.setPrimaryKey(true);
employeeIdField.setRequired(true);
DataSourceIntegerField reportsToField = new DataSourceIntegerField("ReportsTo", "Manager");
reportsToField.setRequired(true);
reportsToField.setForeignKey(id + ".EmployeeId");
reportsToField.setRootValue("11");