私はsmartgwt2.5を使用しています。データベースからjsonをフェッチしてツリーを構築するデータバインドされたツリーグリッドがあります。これは正常に機能します。問題は、たとえば、親を変更しようとしたときです
最初は、ツリーは次のようになります。
dbからフェッチされた私のjson:
[{"id":"a","ReportsTo":"root","isFolder":"true","isOpen":"false"},{"id":"b","ReportsTo":"c","isFolder":"false", "isOpen":"false"},{"id":"c","ReportsTo":"root","isFolder":"true","isOpen":"true"},{"id":"d","ReportsTo":"a","isFolder":"false","isOpen":"false"}]
bの親を変更した後(フォルダcでbをドラッグしてcにドロップ)、すべてのリーフがフォルダを取得します。
http://i.stack.imgur.com/lLHdX.png
これはサーバーに送信されます:
{
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "dataSource":"isc_RestDataSource_0",
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "operationType":"update",
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "data":{
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "id":"b",
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "ReportsTo":"c",
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "isFolder":false,
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "isOpen":"false"
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) },
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "oldValues":{
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "id":"b",
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "ReportsTo":"a",
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "isFolder":false,
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) "isOpen":"false"
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) }
12:46:52,773 INFO [stdout] (http--127.0.0.1-7443-4) }
サイトの更新後、ツリーは正しく表示されます。
a
c
-b
-d
ツリーグリッドの私のコード:
パブリッククラスFavoritesGridはTreeGridを拡張します{
public FavoritesGrid() {
setWidth("12%");
setShowConnectors(false);
setShowResizeBar(true);
setCanReorderRecords(true);
setCanAcceptDroppedRecords(true);
setCanDragRecordsOut(true);
setCanReparentNodes(true);
setDragDataAction(DragDataAction.MOVE);
setAutoSaveEdits(false);
setAutoFetchData(false);
setLoadDataOnDemand(false); //load everything
setHeight("50%");
RestDataSource ds = new RestDataSource();
ds.setRecordXPath("/");
ds.setDataFormat(DSDataFormat.JSON);
OperationBinding fetch = new OperationBinding();
fetch.setOperationType(DSOperationType.FETCH);
fetch.setDataProtocol(DSProtocol.POSTMESSAGE);
fetch.setDataFormat(DSDataFormat.JSON);
OperationBinding add = new OperationBinding();
add.setOperationType(DSOperationType.ADD);
add.setDataProtocol(DSProtocol.POSTMESSAGE);
add.setDataFormat(DSDataFormat.JSON);
OperationBinding update = new OperationBinding();
update.setOperationType(DSOperationType.UPDATE);
update.setDataProtocol(DSProtocol.POSTMESSAGE);
update.setDataFormat(DSDataFormat.JSON);
ds.setOperationBindings(fetch, update, add);
ds.setDataURL("/Kronos/Favorites");
DataSourceTextField key = new DataSourceTextField("id", "id");
key.setPrimaryKey(true);
key.setRequired(true);
DataSourceTextField parent = new DataSourceTextField("ReportsTo",
"ReportsTo");
parent.setRequired(true);
parent.setForeignKey("id");
parent.setRootValue("root");
ds.setFields(key, parent);
//define properties
Tree tree = new Tree();
tree.setDefaultIsFolder(false); //default the nodes should be leafs
tree.setRootValue("root");
tree.setNameProperty("id");
tree.setIdField("id");
tree.setParentIdField("ReportsTo");
//the setOpenProperty also doesn't work
//if i set it smartgwt displays all folder opened
tree.setOpenProperty("isOpen");
//setIsFolderProperty is being ignored after reparent, need to refresh the site for correction
tree.setIsFolderProperty("isFolder");
setDataProperties(tree);
setDataSource(ds);
fetchData();
}
}
誰かplsは私を助けることができますか?