1 Ext.onReady(function(){ 2 3 var genResultDelete = function(){ 4 alert('delete') ; 5 } 6 7 var renderResult = function(value,cellmeta,record,rowIndex,columnIndex,store){ 8 var s = "<a href='#' onclick='genResultUpdate(\""+ rowIndex +"\")'>修改</a>" ; 9 s+= " <a href='javascript:genResultDelete(\""+record.data['id'] +"\")' onclick=''>刪除</a>" ; 10 return s; 11 }; 12 13 14 var adviserCm = new Ext.grid.ColumnModel([ //new Ext.grid.RowNumberer(), 15 {header:'班主任編號',dataIndex:'id',sortable:false}, 16 {header:'姓名',dataIndex:'name',sortable:false}, 17 {header:'登錄帳號',dataIndex:'account',sortable:false}, 18 {header:'密碼',dataIndex:'password' }, 19 {header:'手機號',dataIndex:'mobile',sortable:false}, 20 {header:'email',dataIndex:'email',sortable:false}, 21 {header:'所屬學科',dataIndex:'discipline.name',sortable:false}, 22 {header:'狀態',dataIndex:'status',renderer:renderStatus}, 23 {header:'操作',dataIndex:'id',renderer:renderResult }
]); 26 27 28 29 var adviserStore = new Ext.data.Store({ 30 proxy:new Ext.data.HttpProxy({url:'<%=request.getContextPath()%>/system/useradviser/query.do?time=' + (new Date).getTime()}), 31 reader:new Ext.data.JsonReader({ 32 totalProperty:'totalCount', 33 root:'data' 34 },[ 35 {name:'id'}, 36 {name:'account'}, 37 {name:'discipline.id'}, 38 {name:'discipline.name'}, 39 {name:'name'}, 40 {name:'password'}, 41 {name:'mobile'}, 42 {name:'email'}, 43 {name:'status'} 44 ]), 45 remoteSort:true 46 }); 47 48 49 50 var adviserGrid = new Ext.grid.GridPanel({ 51 id:'adviser-grid', 52 title:'班主任列表', 53 store:adviserStore, 54 region:'center', 55 width:300, 56 cm:adviserCm, 57 sm: new Ext.grid.RowSelectionModel({ singleSelect: true }), 58 bbar:[ 59 new Ext.PagingToolbar( 60 { 61 pageSize:20, 62 store:adviserStore, 63 displayInfo:true, 64 displayMsg:'顯示第{0}條到{1}條記錄,一共{2}條', 65 emptyMsg:"沒有記錄" 66 })] 67 }) ; 68 69 });
上面是一個使用Extjs3.0 API寫的一個班主任列表的頁面的JS代碼,頁面效果如下:
當點擊頁面上的“刪除”按鈕時,JS會提示“缺少對象”錯誤(即genResultDelete 函數找不到),但如果把 Ext.onReady(function(){} ) 內部定義的
    var genResultDelete = function(){ 
       alert('delete') ;
    }  改為下面方式(即去掉var關鍵字)就能找到genResultDelete函數
     genResultDelete = function(){
       alert('delete') ;
    }
對於這個問題,這里先做一個簡單的分析:
這是由於這個函數調用是來自Ext.onReady(function(){} )外部,也就是說點“刪除”按鈕時,會觸發它的單擊事件,此時這個調用是由dom元素發出,調用源來自於Ext.onReady(function(){} )外部,在Ext.onReady(function(){} )外部只能訪問其全局變量,不能訪問到Ext.onReady(function(){} )內的var方式定義的局部變量。深層次的分析將另寫博客分析。
