2015-01-09 3 views
0

현재 GXT 3을 사용하여 트리에 요소를 표시하고 있습니다. 이러한 요소는 데이터베이스에서 검색되고 트리에서 ID로 식별됩니다 (즉, ID는 내 상점의 ModelKeyProvider 임). 는 또한 가능 사용자가 다음과 같은 코드 트리에서 로컬 객체를 생성 할 수있었습니다 : 당신이 볼 수 있듯이GXT 3는 treeStore의 요소를 동적으로 업데이트합니다.

private Tree<EntityDAO, String> tree; 
private TreeStore<EntityDAO> store; 
int count = 1; 
// instanciation and irrelevant stuff 
... 

EntityDAO sel = tree.getSelectionModel().getSelectedItem(); 
EntityDAO child = new EntityDAO(); 

child.setId((long) count); 
store.add(store.getParent(sel), child); 
count++; 
tree.setExpanded(sel, true); 
tree.getSelectionModel().select(child, false); 

, 난 내 로컬 객체에 대한 임시 ID를 (계산)을 설정합니다. 개체를 데이터베이스에 저장할 때 문제가 발생합니다. 영원한 ID는 내 EntityDAO로 설정되지만이 ID를 로컬 개체에 설정하여 데이터베이스와 동기화하려고하면 작동하지 않습니다. 내가 직접

child.setId(result); 
tree.update(child); 

내가 적절한 ID로 내 객체의 복사본을 추가 한 다음 트리

EntityDAO newPR = child; 
newPR.setId(result); 
store.add(store.getParent(child), newPR); 
store.remove(child); 

에서 내 개체를 제거하려고 한 자식 ID를 수정하려고했습니다 그러나 디스플레이는 절대로 업데이트되지 않습니다. 어떤 단서?

답변

1

이의 당신이 시도 첫 번째 방법 업데이트 방법에 대해 논의하자 : 업데이트 방법 API 상태에서

child.setId(result); 
tree.update(child); 

이 :

지정된 항목의 키와 일치하는 항목을 대체, 이 변경이 발생했음을 나타내는 StoreUpdateEvent를 발생시킵니다. 의 레코드 인스턴스를 통해 이전 모델로 변경하면 이 손실되고 레코드가 제거됩니다. 이렇게해도 개체에 의 정렬이나 필터가 다시 적용되지 않습니다. 재정의 : store의 update (...) 매개 변수 : item Store에서 새 항목을 가져옵니다.

기본적으로 업데이트 방법은 동일한 키를 가진 저장소 내의 항목을 매개 변수로 바꿉니다. 귀하의 데이터에는 상점 내부에 존재하지 않는 새로운 키가 있습니다. 이것이 트리 디스플레이에 아무런 영향을 미치지 않는 이유입니다.

EntityDAO newPR = child; 
newPR.setId(result); 
store.add(store.getParent(child), newPR); 
store.remove(child); 

이 방법이 실제로 작동하지만 당신은 단지 하나의 작은 문제가 :

둘째,의는이 객체의 복사본을 생성하고 적절한 ID로 설정할 논의하자. 코드의 첫 번째 줄은 이전 객체 (자식 객체)에 대한 참조가있는 변수를 제공하기 때문에 자식을 제거 할 때마다 newPR도 제거됩니다. 생성자를 사용하여 실제로 새 객체를 만들어야합니다. 여기에 어떻게해야한다고 생각하십니까?

EntityDAO newPR = new EntityDAO(); 
newPR.setId(result); 
newPR.setOtherProperty(child.getOtherProperty()); 
// just copy all property of child to newPR 
store.add(store.getParent(child), newPR); 
store.remove(child); 

희망이 도움이 될 것입니다.

+0

필자는 EntityDAO 클래스의 복제 방법을 구현했는데, 이는 기본적으로 권고 한 것입니다. 감사. –