2012-09-19 6 views
8

이 예제를 사용하여 기본 CRUD를 트리에 추가하려고 시도했습니다. 지금은트리에서 항목을 삭제하는 방법

http://dev.sencha.com/deploy/ext-4.0.0/examples/tree/treegrid.html

, 방금 나무에서 항목을 삭제합니다. 버튼을 추가하고 클릭하면 아래와 같습니다 :

click : function() {; 
    var record = tree.getSelectionModel().getSelection()[0]; 
    store.destroy(record); 
    store.sync(); 
} 

나는 레코드와 상점이 존재 함을 확인했습니다. 이 저장소는이 예에서와 같이 TreeStore 유형입니다. 전송 된 요청을 확인하면 단지 []입니다. 현재 프록시에있는 것은 다음과 같습니다.

var store = Ext.create('Ext.data.TreeStore', { 
    storeId : 'treeStore', 
    model : 'Task', 
    proxy : { 
     type : 'ajax', 
     // the store will get the content from the .json file 
     url : '../resources/data/treegrid.json' 
    }, 
    folderSort : true 
}); 

삭제를 클릭해도 현재 선택한 항목이 제거되지 않습니다. 프록시에서 적절한 폐기 URL을 설정해야하며 요청 헤더에서 삭제해야 할 항목에 대한 세부 정보를 보내지 않는 이유는 무엇입니까? 내가 찾을 수있는 나무에서 CRUD를하는 다른 사례는 없었습니다.

enter image description here


편집 : store.destroy(record)를 사용하는 혼란의 원인이 Ext.data.Store이 방법 remove(record)을 가지고 있지만 Ext.data.TreeStore하지 않는 것을

참고. 또한, 파괴에 대한 약식 접근법은 record.remove(true) 대신에 record.destroy()입니다.

그러나 record.destroy() 또는 record.remove(true)을 수행하는 중에 오류가 발생했습니다. 아마도 상점에서 JSON으로 전송할 노드를 유지해야하므로 record.remove()을 대신 사용하십시오.

답변

13

트리 스토어에는 메소드가 삭제되지 않습니다. 레코드는 treestore에서 가져온 것이므로 node interface으로 장식되어 있습니다. 따라서 remove 메소드를 사용하십시오 (선택적 destroy와 함께).

var record = tree.getSelectionModel().getSelection()[0]; 
    record.remove(true); 
    store.sync(); 
+0

내 부분에 고마워, 어리석은 실수 :) 또한 store.getRemovedRecords()를 사용하여 삭제 된 항목을 프록시에 보내기 전에 볼 수 있습니다. –

+3

'record.remove()'를 사용했습니다. 그렇지 않으면 에러가 발생했습니다. –

관련 문제