2012-09-24 8 views
0

가끔은 몇 개의보기 (목록, 캐 러셀, 데이터보기)에 대해 하나의 저장소를 사용하고 데이터를 새로 고치면 (로드, 필터)이 저장소를 사용하는 모든보기의 DOM이 다시 작성되지만 일부보기는이 시간에 표시되지 않으며이 데이터에는 표시되지 않을 수 있습니다. 목록을 새로 고칠 때마다가 아니라 표시 할 경우에만 목록 DOM을 새로 고칠 수 있습니까? 저장소에있는 첫 번째 목록의 항목 탭이 새 항목을 추가됩니다 목록이 표시된 경우에만 목록을 업데이트하십시오.

Ext.define("Test.view.Main", { 
    extend: 'Ext.tab.Panel', 
    config: { 
     tabBarPosition: 'bottom', 

     items: [ ] 
    }, 

    constructor : function(){ 
     this.callParent(arguments); 
     var store = Ext.create('Ext.data.Store',{ 
       data :[ 
        {title : 'One'}, 
        {title : 'Two'}, 
        {title : 'Three'} 
       ] 
      }), 
      firstList = Ext.create('Ext.List',{ 
       title : 'tab1', 
       store : store, 
       itemTpl : '{title}', 
       onItemDisclosure : function(){ 
        store.add({title : 'Four'}); 
       } 
      }), 

      secondList = Ext.create('Ext.List',{ 
       title : 'tab2' , 
       store : store, 
       itemTpl : '{title}' 

      }), 

      thirdList = Ext.create('Ext.List',{ 
       title : 'tab3', 
       store : store, 
       itemTpl : '{title}' 

      }); 

     this.add([ 
      firstList, 
      secondList, 
      thirdList 
     ]) ; 
    } 
}); 

examle 문제. 두 번째 및 세 번째 목록이 표시되지 않지만 모든 목록의 DOM이 변경됩니다. 하나의 옵션이 표시됩니다. 하나의 기본 저장소를 만들고 각보기에 대해 별도의 저장소를 만듭니다. 그리고 쇼 뷰가 메인 스토어에서 저장하면 채워집니다. 그러나 그것은 좋지 않게 보입니다. 다른 아이디어?

답변

2

내가 아는 한 "즉시 사용 가능한"해결책은 없습니다. docs은 새로 고침 이벤트를 예방할 수 있다고 말하지만 그 이론을 테스트하지는 않았습니다.

또 다른 아이디어는 dataview source을보고 부분을 무시하는 것입니다.

출발점은 아마 당신이 찾을 수있는 저장소 이벤트 후크보고하는 것입니다 :

storeEventHooks: { 
    beforeload: 'onBeforeLoad', 
    load: 'onLoad', 
    refresh: 'refresh', 
    addrecords: 'onStoreAdd', 
    removerecords: 'onStoreRemove', 
    updaterecord: 'onStoreUpdate' 
} 

아마 그것을 완성 지루한 작업이 될 것입니다 그러나.

반면에 새 레코드를 추가 할 때 DOM을 다른 목록에 대해 새로 고치면 안됩니다. 새 목록 항목 만 각 목록에 추가해야 addrecords 이벤트를 비활성화 한 다음 표시되는 다른 목록은 아마도 더 효과적이지 않을 것입니까?

관련 문제