2014-08-29 7 views
0

저는 listContainer를 가지고 있으며 목록의 항목 중 하나를 누르면 목록에서 레코드로 editContainer라는 다른 페이지를 엽니 다. 편집 페이지에서 다른 필드의 값에 따라 드롭 다운을 사용하지 않으려 고합니다. editContainer의 초기화 함수에서 레코드의 값을 가져올 수있는 방법이 있습니까? 여기 내 코드가 있습니다 : -Sencha Touch에서 "initialize"할 때 콘테이너의 레코드를 가져옵니다.

위 코드는 목록 항목이 선택되면 editContainer를 엽니 다. 다음은

Ext.define('myApp.view.EditContainer', { 
    extend: 'Ext.Container', 

    requires: [ 
    'Ext.form.Panel', 
    'Ext.form.FieldSet', 
    'Ext.field.Select' 
], 

config: { 
    id: 'editContainer', 
    autoDestroy: false, 
    layout: 'fit', 
    items: [ 
     { 
      xtype: 'formpanel', 
      id: 'editFormPanel', 
      padding: 10, 
      styleHtmlContent: true, 
      autoDestroy: false, 
      layout: 'fit', 
      items: [ 
       { 
        xtype: 'fieldset', 
        id: 'nameFieldSet', 
        autoDestroy: false, 
        items: [ 
         { 
          xtype: 'textfield', 
          id: 'siteName', 
          itemId: 'mytextfield', 
          label: 'Name', 
          labelWidth: '35%', 
          name: 'name' 
         }, 
         { 
          xtype: 'selectfield', 
          id: 'role', 
          itemId: 'myselectfield4', 
          label: 'Role', 
          labelWidth: '35%', 
          name: 'role', 
          options: [ 
           { 
            text: 'Unassigned', 
            value: 'Unassigned' 
           }, 
           { 
            text: 'Role1', 
            value: 'role1' 
           } 
          ] 
         }, 
         { 
          xtype: 'selectfield', 
          id: 'type', 
          label: 'Type', 
          labelWidth: '35%', 
          name: 'type', 
          options: [ 
           { 
            text: 'Default', 
            value: 'Default' 
           }, 
           { 
            text: 'Custom', 
            value: 'custom' 
           } 
          ] 
         }, 
         { 
          xtype: 'selectfield', 
          id: 'roleValue', 
          label: 'Role Value', 
          labelWidth: '35%', 
          name: 'rolevalue', 
          options: [ 
           { 
            text: 'value1', 
            value: 'value1' 
           }, 
           { 
            text: 'value2', 
            value: 'value2' 
           }, 
           { 
            text: 'value3', 
            value: 'value3' 
           } 
          ] 
         } 
        ] 
       } 
      ] 
     } 
    ], 
    listeners: [ 
     { 
      fn: 'onTextfieldKeyup', 
      event: 'keyup', 
      delegate: 'textfield' 
     }, 
     { 
      fn: 'onSelectfieldChange', 
      event: 'change', 
      delegate: 'selectfield' 
     } 
    ] 
}, 

onTextfieldKeyup: function(textfield, e, eOpts) { 
    this.fireEvent('change', this); 
}, 

onSelectfieldChange: function(selectfield, newValue, oldValue, eOpts) { 
    this.fireEvent('change', this); 
}, 

initialize: function() { 
    this.callParent(); 
    var record; 

    //Code to disable roleValue selectfield if Role is unassigned. 
}, 

updateRecord: function(newRecord) { 
    var me = this, 
     myPanel = me.down('#editFormPanel'); 

    if(myPanel) 
     myPanel.setRecord(newRecord); 

}, 

saveRecord: function() { 
    var me =this, 
     myStore = Ext.data.StoreManager.lookup('MyStore'); 

    var formPanel = me.down('#editFormPanel'), 
     record = formPanel.getRecord(); 
    formPanel.updateRecord(record); 

    return record; 
} 

}); 

답변

1

을 빠른 저장소를 만들 수 있습니다 내 EditContainer입니다 코드에서 두 단계가 다르므로 editContainer의 initialize 메서드를 사용할 수 없습니다.

그러나 editContainer의 setRecord 메서드를 재정 의하여 드롭 다운을 비활성화 할 수 있습니다.

editContainer를 탐색보기로 푸시하면 editContainer의 activate 이벤트를 사용하여 드롭 다운을 사용 중지 할 수 있습니다.

+0

감사합니다. @Martin, setRecord를 재정의하면 저장 기능이 잘못되었습니다. setRecord의 구현에 관한 문서가 있습니까? setRecord에서 모든 필드의 값을 설정하고있는 roleValue에 대한 조건이 있지만 어떤 이유로이 데이터를 저장하지 못합니다. – Sourabh86

+0

컨테이너의 setRecord에서 formPanel.setRecord (record)를 호출해야만했으며 charm처럼 작동했습니다. 감사합니다 @ 마틴 – Sourabh86

0

어쩌면 당신은 당신의 editContainer를 생성하고 데이터를 설정하기 때문에 ... 데이터에 대한 참조를 할 수있는 장소로, 즉석에서

//in your controller where you set the record 

    var mod = Ext.define('app.model.PanelDataModel', { 
     extend: 'Ext.data.Model', 
     config: { 
      fields: [ 
       'roleValue' 
      ] 
     } 
    }); 

    var sto = Ext.create('Ext.data.Store', { 
     model: mod, 
     id:'PanelDataStore' 
    }); 

    sto.add({ 
     roleValue: record.roleValue 
    }); 
    sto.sync(); 


    //Now in your panel's initialize method: 

    var pstore = Ext.getStore('PanelDataStore'); 
    pstore.load(); 

    if(pstore.data.all[0].data.roleValue == 'unassigned'){ 
     Ext.getCmp('roleValue').setDisabled(true); 
    }