범위 문제에 대해 조금은 조사했지만 몇 가지 발견했지만 제 경우에는 잘 작동하지 않습니다. 나는 정말로 atm을 혼란스럽게 생각하기 때문에 나는 포럼에 직접 물을 수도 있다고 생각했다.ExtJS의 범위 함수 핸들러 내부
나무 패널이 있습니다. 그 트리 패널 안에는 xtype의 dockedItem이 있습니다 : 'textfield'. 이 텍스트 필드는 값을 가져 와서 specialkey 이벤트에 대한 핸들러 내에서 Ext.Ajax.Request를 통해 ajax 요청의 매개 변수로 사용합니다. 서버는 디코딩 된 응답의 JSON 객체를 반환하고 트리의 노드에 대한 폴더 ID를 포함합니다. SUCCESS에서 ajax 요청의 설정에는 getNodeById (IdFromAjaxResponse)를 통해 트리의 노드를 참조하고 확장해야하는 기능이 있습니다. 문제는 그 노드를 참조하는 방법을 모른다는 것입니다. 나는 this.getStore(). getNodeById를 시도했지만 'this'가 창을 참조한다. (나는 나무 패널에 대한 컨테이너라고 생각한다.) 트리 패널 또는 트리 스토어를 어떻게 참조합니까? 나는 도움 등
getCmp 같은 일부 코드를 직접 추천을 사용하지 않으 :
Ext.define('treePanel', {
extend: 'Ext.tree.Panel',
alias: 'widget.folderTreePanel',
//title: 'Folder Tree',
displayField: 'name',
rootVisible: false,
store: 'treeStore'
dockedItems: {
xtype: 'textfield',
name: 'Search',
allowBlank: true,
enableKeys: true,
listeners: {
specialkey: function (txtField, e) { //This handler will essentially take the search value and return the path from the DB
if (e.getKey() == e.ENTER){
var searchValue = txtField.getValue();
Ext.Ajax.request({
url: 'MyServlet',
params: {
caseType: 'search',
value: searchValue
},
success: function(response) {
response = Ext.decode(response.responseText);
var node, i=0;
expandFn = function() {
This is where I have a problem->node = this.up('treePanel').getStore().getNodeById(response.IDs[i].folderId);
node.expand();
i++;
if (i >= response.IDs.length-1) return;
expandFn();
}
}
});
}
}, scope: this
}
},
columns: [{
xtype: 'treecolumn',
text: 'Folder Name',
flex: 2,
sortable: true,
dataIndex: 'name'
},{
text: 'Folder ID',
dataIndex: 'id',
flex: 2,
sortable: true
}]
});
편집 : 나는 대답을 발견했다. 각 이벤트는이를 트리거 한 인스턴스를 인수로 처리기 함수에 전달합니다. 이 경우 txtField
은 텍스트 필드 자체를 나타냅니다. 그런 다음 상속을 추적하여 패널을 찾을 수 있습니다.
그러나 지금 새로운 문제가 있습니다. expandFn()
은 'ONCE'가 호출되고 'node'가 정의되지 않았기 때문에 중지됩니다. 응답 배열에 항목이 없어 질 때까지 반복됩니다. 다시 이것이 범위 문제라고 생각하지만, 나는 정말로 혼란스러워서 잘못되었다고 생각하지 않는다. ...
나는 이것을 시도했지만 어떤 이유로 작동하지 않았다 ... – Konstantine