0

我有這樣的代碼,你可以測試here如何在財產更改後立即啓動財產變更事件?

Ext.application({ 
    name: 'Fiddle', 

    launch: function() { 
     Ext.create('Ext.grid.property.Grid', { 
      id: "PROPERTIES", 
      renderTo: Ext.getBody(), 
      autoHeight: true, 
      width: 300, 
      viewConfig: { 
       forceFit: true, 
       scrollOffset: 2 // the grid will never have scrollbars 
      }, 
      listeners: { 
       propertychange: function(source, recordId, value, oldValue) { 
        alert("new Value=" + value); 
       } 
      }, 
      source: { 
       "title": "My Object", 
       "color": Ext.Date.parse('10/15/2006', 'm/d/Y'), 
       "Available": false, 
       "Version": 0.01, 
       "Description": "A test object" 
      } 
     }); 
    } 
}); 

當我的屬性更改事件改變假值爲true在這個例子中,當我點擊關閉真/假盒僅火災。我希望事件(或其他事件)在更改值後立即觸發。我怎樣才能做到這一點?

回答

1

這是它的工作方式,一旦編輯器關閉,您的字段只會觸發propertychange事件。

如果您真的想在編輯器關閉之前運行某個函數或爲每個字段更改值執行其他操作,則必須添加一個控制器並偵聽屬性面板中每個字段的更改事件。 下面是它如何工作的:

Ext.define('MyApp.controller.MyController', { 
    extend: 'Ext.app.Controller', 


    init: function() { 
     this.control({ 
      'propertygrid field': { 
       change: function(field, newValue, oldValue, eOpts){ 
        console.log(field, newValue, oldValue); 
       } 
      } 
     }); 
    } 
}); 

Ext.application({ 
    name: 'MyApp', 

    controllers : ['MyController'], 
    launch: function() { 
     Ext.create('Ext.grid.property.Grid', { 
      id: "PROPERTIES", 
      renderTo: Ext.getBody(), 

      autoHeight: true, 
      width: 300, 
      viewConfig: { 
       forceFit: true, 
       scrollOffset: 2 // the grid will never have scrollbars 
      }, 
      listeners: { 
       propertychange: function(source, recordId, value, oldValue) { 
        alert("new Value=" + value); 
       } 
      }, 
      source: { 
       "title": "My Object", 
       "color": Ext.Date.parse('10/15/2006', 'm/d/Y'), 
       "Available": false, 
       "Version": 0.01, 
       "Description": "A test object" 
      } 
     }); 
    } 
}); 

這裏是一個演示小提琴:https://fiddle.sencha.com/#fiddle/bti