SmartGWT - Как изменить поведение объекта DataSource? - PullRequest
1 голос
/ 30 июня 2011

У меня есть клиентское приложение, которое должно показывать действительно большое дерево (это мега организационный бюджет), которое доступно через 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 Ответ

1 голос
/ 30 июня 2011

В вашем случае вам нужно иметь 3 основных элемента в вашей DS -

1) Поле Id для каждой строки, например - 112233

2) Идентификатор родителяэтот ряд - 1122 для этого например.Вам нужно будет добавить отношение внешнего ключа в это поле.Это то, чего вам не хватает

3) Root Value - 11, чтобы указать источнику данных, который является корневыми элементами

В качестве примера кода посмотрите наКод источника данных для этого примера, важные строки для вас -

DataSourceIntegerField employeeIdField = new DataSourceIntegerField("EmployeeId", "Employee ID");<br> employeeIdField.setPrimaryKey(true);<br> employeeIdField.setRequired(true);<br> DataSourceIntegerField reportsToField = new DataSourceIntegerField("ReportsTo", "Manager");<br> reportsToField.setRequired(true);<br> reportsToField.setForeignKey(id + ".EmployeeId");<br> reportsToField.setRootValue("11");

...