2012-01-15 59 views
1

在Designer中設置我的網名相同MyGridExtJS的如何獲得網格

在點擊按鈕的addRecord叫,其中行被attemting獲取未定義的網格失敗。

如何定義此MyGrid以便它引用面板中的網格?

Ext.define('MyApp.view.MyPanel', { 
    extend: 'MyApp.view.ui.MyPanel', 

    initComponent: function() { 
     var me = this; 
     me.callParent(arguments); 

     var button = me.down('button[text=Submit]'); 

     button.on('click', me.onSubmitBtnClick, me); 
    }, 

    addRecord: function(myRecordArray) { 

     var rows = grid.getStore().getRange(); // ERROR happens here 

      console.log(rows); 


    }, 

    onSubmitBtnClick: function() { 
     this.addRecord(["ll", "kk", "mm"]); 
    } 
}); 

Chrome的JavaScript調試器控制檯 - >

Uncaught ReferenceError: grid is not defined 

回答

6

在您撥打grid.getStore()之前,您需要定義「網格」。您可以在調用之前執行var grid = this;,因爲您正在從網格內部定義addRecord函數。

編輯:

我只是注意到,這不是正在從與商店,但其它一些面板網格面板內部調用。你需要做的是在你的網格面板上設置一個ID配置。例如。 id: MyGridPanel可能已經有一個id配置設置它,你只需要找出它是什麼。如果您使用的是ExtJS設計器,那麼可能實際上已經將設置爲「MyGridPanel」。您需要調用它像這樣:

var grid = Ext.getCmp("MyGridPanel"); 

然後你會怎麼做:

grid.getStore().getRange() 
+0

非常感謝你,我真的被卡在那裏 – BAR 2012-01-15 04:39:21

0

嘗試改變button.on('click', me.onSubmitBtnClick, me)button.on('click', Ext.bind(me.onSubmitBtnClick, me), me)

這看起來像一個範圍問題,在您的onSubmitBtn()方法,this大概指的錯了對象(例如,窗口或按鈕),而不是網格對象,這就是你想要的。

+0

所作的修改,但它是工作和失敗一樣。我不相信這是按鈕的錯誤,只是想展示一個事件的想法。 – BAR 2012-01-15 00:14:30

+0

Chrome Javascript調試器控制檯 - >未捕獲ReferenceError:未定義網格 – BAR 2012-01-15 00:15:59

+0

我也看到你擴展MyApp.view.ui.MyPanel?這是否擴展GridPanel?大概應該在onSubmitBtnClick中的this.addRecord之前放置調試器語句,只是爲了看看這是指什麼,除此之外,我沒有任何其他建議 - 抱歉,自從我執行任何ExtJS工作以來,這已經很長時間了。 – Dzhu 2012-01-15 00:21:23