2014-08-29 62 views
0

我有一個listContainer,並且點擊列表中的任何項目,我打開另一個名爲editContainer的頁面,其中包含列表中的記錄。在編輯頁面中,我想根據另一個字段的值禁用下拉列表,是否有任何方法可以在editContainer的初始化函數中獲取記錄中的值?這裏是我的代碼: -在Sencha Touch的「initialize」中獲取容器的記錄

onListItemTap:function(dataview,index,target,record,e,eOpts) 
{ 
if(record) 
this.editContainer = Ext.create('myApp.view.EditContainer',{title:'Edit Data'}); 
this.editContainer.setRecord(record); 
this.getMainNav().push(this.editContainer); 
} 

上面的代碼打開editContainer當選擇列表項。下面是我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的初始化方法。

但是,您可以覆蓋editContainer的setRecord方法,因此它還會禁用下拉菜單。

由於您將editContainer壓入導航視圖,您還可以使用editContainer的activate事件來禁用下拉菜單。

+0

感謝@Martin,如果我重寫setRecord,那麼我的保存功能就會出錯。有沒有關於setRecord實現的任何文檔?在setRecord中,我設置了所有字段的值併爲roleValue(正在工作)創建了一個條件,但是由於某種原因,這會打破我的數據保存。 – Sourabh86 2014-09-02 09:35:23

+0

不得不在Container的setRecord中調用formPanel.setRecord(record)並且它像魅力一樣工作。感謝@Martin – Sourabh86 2014-09-02 11:31:36

0

也許你可以即時創建一個快捷店,作爲一個地方有數據參考...

//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); 
    } 
相關問題