2017-10-17 61 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()即可。