2013-04-07 1 views
2

행을 삭제하고 동일한 구성원 ID를 가진 행을 검색 한 후 변경하거나 다시로드 할 표를 원합니다. 이를 위해 필터를 추가합니다. 다시 모든 행을 삭제 한 후 필터를 사용하여 콜백 저장합니다. 내 저장 필터가 잘 표시되지만 표시 할 수 없습니다 ...... 이전 표시를 유지합니다 ......필터링 중에 저장소를 다시로드 한 후에도 눈금이 변경되지 않습니다.

Ext.define('${pkgName}.v02x001001.SV02X00100101' , { 
extend : 'Ext.grid.Panel', 
alias  : 'widget.sv02x00100101', 
id  : 'sv02x00100101', 
border : true, 
modal  : true, 
height : 300, 
width  : 455, 
viewConfig: { 
    stripeRows : true, 
    forceFit  : true, 
    emptyText  : 'No Records to display', 
    listeners  : { 
     viewready : function(v) {      
      var store = Ext.data.StoreManager.get('S02X001001');    
      store = !store ? Ext.create("S02X001001") : store; 
      var value = Ext.getCmp('member-sv02x00100104').getValue(), 
      filters = new Array(); 
      store.clearFilter(); 
      store.filter('member', value); 
      filters.push({ 
       property : 'member', 
       value : value 
       }); 
      store.loadPage(1, { 
       filters : filters 
      }); 
     } 
    } 
}, 
initComponent: function() { 
    this.store = 'S02X001001';  

    this.tbar= Ext.create('Ext.ux.StatusBar', {    
     topBorder  : false, 
     statusAlign  : 'right', 
     items : [{ 
      xtype  :'button', 
      text  : 'ADD', 
      icon  : "${resource(dir: 'images', file: 'ADD01003.png')}", 
      listeners : { 
       click : this.onNewAddress 
       } 
     },'-'] 
    }); 

    this.columns = [ 
    { 
     text   : 'Address Line 1', 
     dataIndex  : 'addressline1', 
     sortable  : false, 
     flex   : 1 
    },{ 
     text   : 'Address Line 2', 
     dataIndex  : 'addressline2', 
     sortable  : false, 
     width   : 170 
    },{ 
     menuDisabled : true, 
     sortable  : false, 
     id    : 'deletee', 
     xtype   : 'actioncolumn',    
     width   : 22,    
     items   : [{ 
      icon  : "${resource(dir: 'images', file: 'DEL01005.png')}", 
      tooltip  : 'Delete This?', 
      scope  : this, 
      handler  : function(grid, rowIdx, colIdx) { 
       var record = grid.getStore().getAt(rowIdx); 
       var conId = record.data.id 
       this.onDeleteClick(conId); 
      } 
     }] 
    }]; 
    this.callParent(arguments); 
}, 

onNewAddress: function(btn, e, eOpts){ 
    var view=Ext.widget('sv02x00100102'); 
    view.show(); 
    var a = Ext.getCmp('member-sv02x00100104').getValue(); 
      Ext.getCmp('member-sv02x00100102').setValue(a); 
}, 
onDeleteClick:function(conId){ 
     Ext.MessageBox.show({ 
     title  : 'Delete', 
     msg   : 'Really want to delete ?', 
     icon  : Ext.Msg.WARNING, 
     buttons  : Ext.MessageBox.YESNO, 
     buttonText :{ 
      yes: "Delete", 
      no : "No" 
     }, 
     scope   : this, 
     animateTarget : 'deletee', 
     fn: function(btn, dbQty){ 
      if(btn == 'yes'){ 
       var registration = Ext.create('${appName}.model.M02X001001',{ 
        id : conId 
       }); 
       var store = this.getStore(); 
       registration.destroy({ 
        scope : this, 
        success : function(model, operation) { 
         if(model != null){ 
         var store = Ext.data.StoreManager.get('S02X001001');    
         store = !store ? Ext.create("S02X001001") : store; 
         var value = Ext.getCmp('member-sv02x00100104').getValue(), 
         filters = new Array(); 
         store.clearFilter(); 
         store.filter('member', value); 
         filters.push({ 
          property : 'member', 
          value : value 
          }); 
         store.loadPage(1, { 
          filters : filters 
         }); 
         } 
        }, 
        failure: function(){ 
         console.log('Unable to delete'); 
        } 
       });   
      }       
     }   
    });      
}  

}); 여기

내 가게가 가능 상대적인 행의 나머지 부분을 검색하는 방법을

........ ..........

Ext.define('${pkgName}.S02X001001', { 
extend : 'Ext.data.Store', 
model  : '${appName}.model.M02X001001', 
idProperty: 'id', 
autoLoad : true, 
autoSync : true, 
filterParam: 'query', 
remoteSort: true, 
proxy  : { 
    type : 'ajax', 
    noCache : false, 
    limitParam: 'limit', 
    startParam: 'start', 
    url : '${createLink(controller:'C02x001001', action: 'store')}', 
    reader:{ 
     type   : 'json', 
     root   : 'data', 
     totalProperty : 'total', 
     successProperty : 'success', 
     messageProperty : 'message', 
     implicitIncludes: true 
    }, 
    simpleSortMode : true 
}, 
sorters: [{ 
    property: 'id', 
    direction: 'asc' 
}] 

});

+0

그리드는 저장소에 바인딩되며 모든 이벤트에서 반응합니다. 상점에 모든 레코드가 있지만 그리드에 표시되지 않는다고 말할 때 의미가 없습니다 ... 실제로 말하는 상점 인스턴스가 실제로 눈금에 묶여 있습니까? 레코드가 상점에로드되었는지 정말로 확신합니까? – sra

+0

예, 그렇습니다. 필터링 된 데이터를 검색하는 격자 패널이 있습니다. 하지만 데이터를 삭제하면 그리드의 스토어를 삭제 기능의 성공으로 다시 호출해도 그리드를 변경할 수 없습니다. 나는 상점에서 필터링 된 데이터를 발견했다 (Firebug). 내 버그는 무엇입니까 ..... –

+0

그리드는 여기의 일종의 표현 레이어 일뿐입니다. 데이터는 저장소에 있습니다. 저장소가 변경되면 그리드가 바인딩으로 변경됩니다. 그렇게하지 않으면 상점에서 응답을 빨간색으로 표시 할 수있는 경우 작업하는 상점의 참조를 다시 확인해야합니다. 바인딩 때문에 상점에서 이벤트를 일시 중단하는 경우 그리드가 반응 할 수 없습니다. – sra

답변

1

는 자동으로 를 그리드보기를 새로해야하지만 당신은 수동 방식으로보기를 새로 고칠 수 있습니다.

사용 방법의 getView() 새로 고침(); try :

Ext.getCmp('sv02x00100101').getView().refresh(); 
+0

답장을 보내 주셔서 감사합니다 ... 답변을 시도했습니다 ..... 동일하게 유지됩니다 .. 그리드가 이전 레코드를 보유하고 있습니다 ............... –

+0

어쩌면 로그인을 시도하고 싶습니다. 먼저 레코드를 저장하십시오. 사용법 : console.log (store_name); 그런 다음 기록 (store.data.items)의 데이터를 관찰하십시오. 레코드가 서버에서 응답 한 실제 데이터이면 상점에서 실수 한 것이 아님을 의미합니다. –

+0

아니 Funckye, 내가 내 요구를 분명히 할 수 있습니다. 잘. 즉, 테이블에있는 특정 멤버의 5 가지 데이터를 가졌지 만 다른 멤버의 많은 데이터가 있습니다. 그래서 필터링하여 특정 멤버의 데이터를 검색하고 그리드 패널의보기 준비에 사용했습니다. 내 그리드는 특정 회원의 데이터를 유지합니다. 이제 특정 회원의 데이터 하나를 삭제하면 얼마나 많은 데이터가 남아 있습니까? 그것은 네이어야합니다, 그렇죠? 데이터베이스는 그것을 4 가지로 보여준다. 그리드에는 5가 표시됩니다. 이는 그리드가 새 레코드 (데이터베이스의 현재 상태)를 다시로드하지 않음을 의미합니다. 내 응용 프로그램을 새로 고침하면 4 개가 표시됩니다. 그 의미는 ??? –

관련 문제