`
hegj
  • 浏览: 4953 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于ExtJs的scope

阅读更多
先来一段源码
/**
 * 命名规则配置
 * @author hegj
 * @class NamingRulesConfigure
 * @extends Ext.grid.GridPanel
 */
NamingRulesConfigure = Ext.extend(Ext.grid.GridPanel,{
	id : 'NamingRulesGrid',
	pageSize : 10,
	labelAlign : 'right',
	buttonAlign : 'center',
	frame : false,
	border : false,
	disabled : false,
	autoScroll : true,
	loadMask: {msg:'正在加载数据,请稍侯……'},
	listeners : {
		cellclick : function(grid, rowIndex, columnIndex, e) {
			var sel = grid.getSelectionModel().getSelected();
			var metadataId = sel.get('metadataId');
			if (e.getTarget().innerHTML === '删除' ) {
				this.deleteNamingRules(metadataId);
			}
			if (e.getTarget().innerHTML === '修改' ){
				EditNamingRulesForm(metadataId,'修改命名规则');
			}
		}
	},
	initComponent : function(){
		var _sm = new Ext.grid.CheckboxSelectionModel();
		this.sm = _sm;
		this.columns = [new Ext.grid.RowNumberer(),_sm,
		    {
				id : 'metadataId',
				header : '元数据id',
				dataIndex : 'metadataId',
				hidden : true
		    },{
		    	id : 'name',
		    	header : '命名规则名称',
		    	dataIndex : 'name',
		    	sortable : true
		    },{
		    	id : 'displayName',
		    	header : '命名规则中文名',
		    	dataIndex : 'displayName',
		    	sortable : true
		    },{
		    	id : 'rulesExpression',
		    	header : '规则表达式',
		    	dataIndex : 'rulesExpression',
		    	sortable : true
		    },{
		    	header : '操作',
		    	renderer : function(value, metaData, record, rowIndex, colIndex,store) {
					return "<a href='#'>修改</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href='#'>删除</a>";
				}
		    }];
		var l = new Ext.form.Label({
			text : '规则名称'
		});
		var ruleName = new Ext.form.TextField();
		var searchBtn = new Ext.Button({
			iconCls : 'search',
			scope : this,
			text : '查询',
			handler : function(){
				this.store.load({params:{searchName : ruleName.getValue(),start:0,limit:this.pageSize}});
			}
		});
		var createBtn = new Ext.Button({
			scope : this,
			text : '新增',
			handler : function(){
				EditNamingRulesForm('','新增命名规则');
			}
		});
		var deleteBtn = new Ext.Button({
			iconCls : 'remove',
			text : '删除',
			scope : this,
			handler : function(){
				this.batchDelete();
			}
		});
		var importBtn = new Ext.Button({
			text : '导入',
			handler : function(){
				alert('导入');
			}
		});
		var downloadBtn = new Ext.Button({
			text : '规则表达式配置说明',
			handler : function(){
				alert('规则表达式配置说明');
			}
		});
		var tItems =[l,'-',ruleName,'-',searchBtn,'-',createBtn,'-',deleteBtn,'-',importBtn,'-',downloadBtn];
		this.tbar = new Ext.Toolbar({
			items : tItems
		});
		
		var jsonReader = new Ext.data.JsonReader({  
			root: 'rows',  
			totalProperty: 'totalCount',
			id: 'metadataId' },  
		[{name: 'metadataId',mapping:'metadataId', type:'string'},
		 {name: 'modelId',mapping:'modelId', type:'string'},
		 {name: 'name',mapping:'name', type:'string'},
		 {name: 'displayName',mapping:'displayName', type:'string'},
		 {name: 'rulesExpression',mapping:'rulesExpression', type:'string'},
		 {name: 'remark',mapping:'remark', type:'string'},
		 {name: 'path',mapping:'path', type:'string'}
        ]);
		var store =  new Ext.data.Store({
			baseParams:{searchName : ruleName.getValue()},
			proxy : new Ext.data.HttpProxy({url : lg.url.web+'/naming-rules!findNamingRulesByName.action'}),   
			reader: jsonReader
		});
	
		store.load({params:{start:0,limit:this.pageSize}});
		this.store = store;
		this.bbar = new Ext.PagingToolbar({
			pageSize : this.pageSize,
			store : store,
			loadMask : true,
			displayInfo : true,
			displayMsg : '从{0}到{1}条记录,共{2}条记录',
			emptyMsg : '无记录',
			scope : this
		});
		NamingRulesConfigure.superclass.initComponent.call(this);
	},
	deleteNamingRules : function(metadataId){
		var store = this.store;
		Ext.Msg.confirm('提示','确认删除?',function(btn){
			if(btn=='yes'){
				Ext.Ajax.request({
					url : lg.url.web+'/naming-rules!deleteNamingRulesById.action',
					method : 'post',
					timeout : 3000,
					params : {
						metadataId : metadataId
					},
					failure : function(response){
						alert('操作失败');
					},
					callback : function(option, success, response){
						if(success !== true) {
//							mk.hide();
							return
						};
						store.reload();
//						mk.hide();
					}
				});
			}
		});
	},
	batchDelete : function(){
		var store = this.store;
		var ids = this.getSelectedNamingRules();
		Ext.Msg.confirm('提示','确认删除?',function(btn){
			if(btn=='yes'){
				Ext.Ajax.request({
					url : lg.url.web+'/naming-rules!batchDeleteNamingRules.action',
					method : 'post',
					timeout : 3000,
					params : {
						ids : ids
					},
					failure : function(response){
						alert('操作失败');
					},
					callback : function(option, success, response){
						if(success !== true) {
//							mk.hide();
							return
						};
						store.reload();
//						mk.hide();
					}
				});
			}
		});
	},
	getSelectedNamingRules : function(){
		var rs = this.getSelectionModel().selections;
		var n = rs.length;
		var str = "";
		for(var i = 0; i < n; i++){
			var r = rs.get(i);
			str = str + "," + r.get('metadataId');
		}
		if(str!=""){
			str = str.substring(1);
		}
		return str;
	}
});

scope决定this的指向
	var deleteBtn = new Ext.Button({
			iconCls : 'remove',
			text : '删除',
			handler : function(){
				this.batchDelete();
			}
		});

这里的this指向button本身,因为this是在button的handler里面使用的,而且此button没有指定scope,则其scope默认指向button本身,所以this.batchDelete()找不到方法batchDelete()因而无法执行。
	var deleteBtn = new Ext.Button({
			iconCls : 'remove',
			text : '删除',
			scope : this,
			handler : function(){
				this.batchDelete();
			}
		});

这里指定了scope,所以this.batchDelete()中的指向该scope所指定的容器,而scope中的this因为是在grid这一层中使用的,所以指向的是这个grid,所以this.batchDelete()就能找到此grid定义的方法batchDelete()。
分享到:
评论

相关推荐

    extjs5支持的Font Awesome中glyph值对应表下载

    http://fortawesome.github.io/Font-Awesome/cheatsheet/网页转化成的pdf 看到对应的图标就可以得到相应的glyph数字哦。简单易用,转化成pdf随时可以使用的哦 可以参照 ...

    ExtJS 多文件上传 UploadDialog For ExtJS3.x

    ### ExtJS 多文件上传 UploadDialog For ExtJS3.x #### 概述 在Web开发领域,特别是使用ExtJS框架进行界面设计时,文件上传功能是必不可少的一部分。然而,随着ExtJS版本的更新,原有的多文件上传组件可能不再兼容...

    Extjs 性能优化 High Performance ExtJs

    本文旨在针对具有一定 JavaScript 基础(理解面向对象、继承、作用域等概念)并且熟悉 Extjs 框架(了解组件间继承关系)的开发者,提供一些关于如何对 Extjs 的前台架构进行性能优化的方法。 #### 二、缓存 缓存...

    EXTJS5 实现一个只能选择年月的控件

    在开发过程中,遇到仅需要Extjs选择年月的控件,在国内搜索了些资源,因为Extjs5还未普遍开来加上很多UI框架的诞生,似乎关于Extjs5的资源很少。 在StackFlow搜索到了自己想要的答案,今天放在这里和大家一起分享。 ...

    ExtJs自定义消息框

    ### ExtJs自定义消息框详解 #### 一、引言 在Web开发中,与用户的交互体验至关重要。作为一款优秀的JavaScript框架,ExtJs提供了多种工具和组件帮助开发者快速构建高质量的用户界面。其中,消息框作为一种常见的...

    ExtJS中文手册.pdf

    JavaScript中的作用域(scope) - **作用域概念**:作用域决定了变量的可访问范围,了解作用域有助于编写更清晰、更高效的代码。 - **作用域类型**:包括全局作用域、局部作用域等。 - **作用域管理**:正确管理...

    extjs简单例子

    ExtJS是一种强大的JavaScript库,主要用于构建富客户端的Web应用程序。这个“extjs简单例子”教程集合,显然旨在帮助初学者快速上手并理解ExtJS的基本概念和功能。下面,我们将详细探讨这些文件所涵盖的知识点。 1....

    ExtJs事件处理 ajax

    ExtJs 是一个强大的JavaScript库,专门用于构建富客户端应用程序。在ExtJs中,事件处理是构建交互式用户界面的关键组成部分。下面将详细解释标题和描述中提到的ExtJs事件处理,以及与Ajax交互的相关知识。 1. **...

    extjs 总结

    EXTJS 是一种基于 JavaScript 的前端框架,主要用于构建富客户端应用程序。它提供了一套完整的组件库,包括用于创建各种用户界面元素的类,如表格、窗口、菜单、表单等。在EXTJS中,TreePanel是用于展示树形数据结构...

    ExtJs中Store加载(load)时候提示信息

    在开发基于ExtJS框架的应用程序时,处理数据加载与用户交互是至关重要的环节。当Store在加载(load)数据过程中,向用户提供明确的提示信息,不仅能够提升用户体验,还能增加应用的专业度。以下是对如何在ExtJS中...

    ExtJs部署及使用方法

    url=" + targetUrl, scope: this }, autoScroll: false, closable: true }).show(); } // tabFrame.jsp 的示例代码 // // // ${param.url}" width="100%" height="100%" frameborder="0"&gt; // 该jsp文件用于...

    ExtJS 事件笔记

    - 通过`scope`参数指定作用域。 - 使用`Function.prototype.createDelegate`创建具有指定作用域的代理函数。 - `call`和`apply`方法可以改变`this`的值,但会立即执行函数,而`createDelegate`则不会。 总的来说...

    用extjs 4.0打造自己的WEB桌面

    scope: me }], shortcuts: Ext.create('Ext.data.Store', { model: 'Ext.ux.desktop.ShortcutModel', data: [{ name: 'Grid Window', iconCls: 'grid-shortcut', module: 'grid' }] }) }); } ``` 在上面...

    extjs对ajax的支持文档

    - `scope`: 指定回调函数的作用域。 4. **数据处理**: - `dataType`: 预期的服务器响应类型,如json、xml、html等。 - `transformResponse`: 在处理响应数据之前运行的函数。 - `processData`: 是否自动处理...

    ExtJS PPT

    6. **`scope` 参数:**用于设置事件处理函数的执行上下文,即`this`关键字指向的对象。 EXTJS的事件系统还支持事件冒泡和事件阻止,允许开发者控制事件的传播路径。同时,EXTJS的组件模型允许组件之间自由地发布和...

    EXTJS 中文手册 电子书

    EXTJS学习必备. 电子书. EXT 中文手册 ................................................................................................................. 1 EXT简介 ...........................................

    extjs TreePanel

    EXTJS中的TreePanel是用于展示层级数据的组件,它以树状结构呈现数据。TreePanel提供了丰富的配置项和方法,使得我们可以灵活地控制树的显示和交互。以下是对TreePanel及其主要配置项和方法的详细说明: 1. **主要...

    javascript extjs

    此外,如果事件处理需要在特定的上下文中进行,可以使用`scope`参数来设定事件处理函数的作用域。 虽然文件列表只给出了"admin",但可以推测这是应用程序的管理部分,可能包含了用于系统管理和维护的界面。在ExtJS...

Global site tag (gtag.js) - Google Analytics