2012-10-25 6 views
1

I 탭 패널의 목록보기에서 다음 리스너가 있습니다뷰에 컨트롤러에서 데이터를 전달하는 방법

config: { 
    refs: { 
     mainView: "mainview", 
     activeLists: "activelists", 
     listView: "listview" 
     // I deleted some code for easier reading 
    }, 
    control: { 
     activeLists: { 
      showListCommand: "onShowListCommand" 
     } 
    } 
}, 

이 :

listeners: { 
    itemtap: function (list, index, item, e) { 
    var record = list.getStore().getAt(index); 
    this.fireEvent('showListCommand', this, record); 
} 

이 내 컨트롤러의 설정입니다 컨트롤러에서 모두 onShowListCommand 함수와 그 함수가 호출합니다.

onShowListCommand : function (list, record) { 
    this.activateListView(record); 
}, 

slideLeftTransition: { type: 'slide', direction: 'left' }, 

activateListView: function (record) { 
    var listView = this.getListView(); 
    listView.setRecord(record); 
    console.log(record.get('id')); 
    Ext.Viewport.animateActiveItem(listView, this.slideLeftTransition); 
}, 

콘솔 로그는 예상대로 작동합니다. 탭 된 목록 항목의 ID를 기록합니다. 또한 setRecord 함수가 작동하는지, listView의 양식 텍스트 필드 안에 모델의 제목, ID 및 예산 필드를 모두 표시합니다.

이제 지난 10 시간 동안이 모델 필드를 listView 에 전달하고 제목 또는 HTML과 같이 양식 외부에서 사용할 수있게되었습니다. 기본적으로 탭 패널 안에 목록이 있고 itemtap에 Ext.Viewport.animateActiveItem을 사용하여 다른보기가 표시됩니다.

ListView는 "Ext.form.Panel"이며 현재 도구 모음과 initialize() 함수를 통해 필드 세트가 있지만 일부 일반 HTML로 필드 세트를 바꾸고 싶지만 setRecord의 데이터를 사용할 수는 없습니다.() 어떠한 방식으로.

답변

1

이 문제가 해결되었습니다. 주요 문제는 초기화되지 않은 모든 데이터를 표시하려고했기 때문입니다. 뷰포트를 통해 데이터를 전달하는 방법을 찾아 냈습니다.

다음
activateListView: function (record) { 
     Ext.Viewport.animateActiveItem({xtype: 'listview', data: record.data}, {type: 'slide', direction: 'left'}); 
    } 

이야 내가보기에 데이터를 사용하는 방법 :

여기에 지금 외모로 데이터를 전달하려는 내 기능은보기를 표시하는 방법

var datafield = this.getData(); 
console.log(datafield .id); 
+0

문제가 해결 된 것으로 보이도록 본인의 답을 수락하는 것을 고려해보십시오. – zelexir

+0

물론 :) 그것은 말합니다 : '당신은 내일 당신의 대답을 받아 들일 수 있습니다.' –

0

나는 당신을 올바르게 이해하기를 희망하지만 나는 이것이 당신을 도울 것이라고 확신하지 못합니다.

어쨌든, 내 응용 프로그램에서 컨트롤러의 수신기 함수 (onListTap)에서 setData() 함수를 통해 업데이트 된 패널이 있습니다. 이것은 또한 컨트롤러에서 가져온 패널에서 updatedata 이벤트를 시작합니다.이 이벤트는 컨트롤러에서 가져온 다음 패널 하위 패널을 변경하는 데 사용됩니다. 때문에 updateData 청취자의

예 :이 당신을 도와 내가 문제를 잘못 이해 한 경우 추가 도움이 필요하면 의견에 반환하거나하시기 바랍니다

onMyPanelUpdate: function(component, newdata, options) { 
    var holder = component.child("#innerContainer"); 

    holder.child("#detailsText").setData(newData); 
    holder.child("#detailImg").setSrc(newData.imgUrl); 
    holder.child("#detailsTitle").setData(newData); 
    holder.child("#extras").setHtml(newData.extraHtml); 
} 

희망.

+0

을하지 확실히 내가 필요하지만 올바른 길에있어, 고마워! 나는 데이터를 표시 할 필요가 없다. 데이터에서 몇 가지 변수를 만들어 함수에 사용해야한다. setData() 함수는 유망 해 보인다. 뷰에서 직접 가져올 수있는 방법이있다. 그 기능을 사용하고 있습니까? 아니면 getData와 같은 것일까 요? 나는 sencha 문서를보고 있지만 아무것도 찾을 수 없습니다. 명확하지 않은 것에 대해 유감스럽게 생각하지만 설명하기가 어렵습니다. –

관련 문제