SmartGWT - 如何更改DataSource对象的行为?

时间:2011-06-29 21:00:35

标签: gwt datasource smartgwt

我有一个客户端应用程序,需要显示一个非常大的树(这是一个巨大的组织预算),可以通过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();

有什么想法吗?

1 个答案:

答案 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");