背景
用ExtJS新寫了一個功能,運行時控制台打印錯誤Cannot read property 'on' of undefined,出錯代碼位置是Ext.define.bindStoreListener。
分析
根據出錯代碼可以猜測出與store有關,但是依然沒有頭緒。對於新技術或未知問題,我只好祭出殺手鐧“排除法”,先鎖定問題所在。有計划的刪除部分代碼,再刷新頁面嘗試。然后,一遍遍重復直到不再報錯。
最終,刪除了一個combo控件后不再報錯。這個控件中有個屬性是store,應該是ExtJS在加載此處時出錯。於是得出問題所在:頁面控件中引用了store,但是Controller的stores屬性沒有加載。
解決方案
在Controller層添加要用的store。
1 Ext.define('XXX', { 2 extend : 'Ext.app.Controller', 3 ... 4 stores : [ '在此添加store'] 5 ...