2017-10-17 64 views
1

我需要在存儲加載時執行某些操作。問題在於商店的'load'事件被觸發,'$ binding'未定義,因此'owner'屬性不可用。

商店及其對「負載」事件監聽器在視圖模型定義:

Ext.define('App.view.TSegmentacionFrmViewModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.TSegmentacionFrm', 

    requires: [ 
     'Ext.data.Store', 
     'Ext.data.proxy.Ajax', 
     'Ext.data.reader.Json' 
    ], 

    stores: { 
     oStoreSegmentacion: { 
      autoLoad: true, 
      model: 'App.model.oGrid', 
      proxy: { 
       type: 'ajax', 
       extraParams: { 
        cmd: 'Get', 
        cCodClass: 'SegmentacionBrw' 
       }, 
       url: "TGlobalData.ashx", 
       useDefaultXhrHeader: false, 
       reader: { 
        type: 'json', 
        rootProperty: 'aResultado', 
        totalProperty: 'nRows' 
       } 
      }, 
      listeners: { 
       load: 'onJsonstoreLoad' 
      } 
     } 
    } 
}); 

商店綁定在視圖(下面的代碼的第58行)中所定義:

Ext.define('App.view.TSegmentacionFrm', { 
    extend: 'Ext.tab.Panel', 
    alias: 'widget.TSegmentacionFrm', 

    requires: [ 
     'App.view.TSegmentacionFrmViewModel', 
     'App.view.TSegmentacionFrmViewController', 
     'Ext.tab.Tab', 
     'Ext.toolbar.Toolbar', 
     'Ext.toolbar.Separator', 
     'Ext.grid.Panel', 
     'Ext.view.Table', 
     'Ext.grid.column.Action', 
     'Ext.form.Label', 
     'Ext.grid.column.RowNumberer' 
    ], 

    config: { 
     [...] 
    }, 

    controller: 'TSegmentacionFrm', 
    viewModel: { 
     type: 'TSegmentacionFrm' 
    }, 
    cls: 'CustomTabs', 
    itemId: 'TSegmentacionFrm', 
    activeTab: 0, 
    deferredRender: false, 

    initConfig: function(instanceConfig) { 
     var me = this, 
      config = { 
       items: [ 
        { 
         xtype: 'panel', 
         itemId: 'oPnlHist', 
         layout: { 
          type: 'vbox', 
          align: 'stretch' 
         }, 
         bind: { 
          title: '{lbl_ListadoHist}' 
         }, 
         dockedItems: [ 
          { 
           [...] 
          } 
         ], 
         items: [ 
          { 
           xtype: 'TMainBrowseGrid', 
           cBrwName: 'oBrwSegmentacion', 
           cCodForm: 'SegmentacionFrm', 
           cls: 'CustomGrid', 
           flex: 1, 
           itemId: 'oGridHistorico', 
           bind: { 
            store: '{oStoreSegmentacion}' 
           }, 
           listeners: { 
            selectionchange: 'onOGridProductosSelectionChange' 
           }, 
           columns: 
            [...] 
          } 
         ] 
        }, 
       ] 
      }; 
     [...] 
    }, 
}); 

,這是onJsonstoreLoad方法,在視圖控制器:

Ext.define('App.view.TSegmentacionFrmViewController', { 
    extend: 'Ext.app.ViewController', 
    alias: 'controller.TSegmentacionFrm', 

    onJsonstoreLoad: function (store, records, successful, operation, eOpts) { 


     // This '$binding' is undefined 
     // Uncaught TypeError: Cannot read property 'owner' of undefined at g.onJsonstoreLoad 
     var oView = store.$binding.owner.getView(); 

     [...] 

    } 

}); 

我在做什麼錯了嗎?前段時間寫這篇文章的人說,它的工作很成功,但現在它似乎被打破了。謝謝。

回答

1

$binding是一些內部屬性,它不是API的一部分,不使用它。憑藉在控制器中的回調,只需撥打this.getView()即可。