Ext.onReady(function(){} )函數的作用域分析(1)


 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方式定義的局部變量。深層次的分析將另寫博客分析。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM