`
forlab
  • 浏览: 133458 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ext scope 学习

 
阅读更多

//http://www.cnblogs.com/yin-jingyu/archive/2011/08/03/2126460.html
Ext scope 学习
  首先,用一句话来概括scope的作用:scope就是用来解决 js 中 this 的指向问题。

  下面进行讨论:

   1、 关于JavaScript中this的使用,这是一个由来已久的问题了。我们这里就不介绍它的发展历史了,只结合具体的例子,告诉大家可能会遇到什么问题,在遇到这些问题时EXT是如何解决的。在使用EXT时,最常碰到的就是使用Ajax回调函数时出现的问题,如下面的代码所示。

<input type="text" name="text" id="text"><input type="button" name="button" id="button" value="button">


现在的HTML 页面中有一个text输入框和一个按钮。我们希望按下这个按钮之后,能用Ajax去后台读取数据,然后把后台响应的数据放到text中,实现过程如代码清单10-6所示。

代码清单10-6 Ajax中使用回调函数

function doSuccess(response) {text.dom.value = response.responseText;}

Ext.onReady(function(){
Ext.get('button').on('click', function(){
var text = Ext.get('text');
Ext.lib.Ajax.request(
'POST',
'08.txt',
{success:doSuccess},
'param=' + encodeURIComponent(text.dom.value)
);
});
});


在上面的代码中,Ajax已经用Ext.get('text')获得了text,以为后面可以直接使用,没想到回调函数success不会按照你写的顺序去执行。当然,也不会像你所想的那样使用局部变量text。实际上,如果什么都不做,仅仅只是使用回调函数,你不得不再次使用Ext.get('text')重新获得元素,否则浏览器就会报text未定义的错误。

在此使用Ext.get('text')重新获取对象还比较简单,在有些情况下不容易获得需要处理的对象,我们要在发送Ajax请求之前获取回调函数中需要操作的对象,有两种方法可供选择:scope和createDelegate。

为Ajax设置scope。

function doSuccess(response) {this.dom.value = response.responseText;}Ext.lib.Ajax.request('POST','08.txt',{success:doSuccess,scope:text},'param=' + encodeURIComponent(text.dom.value));


在Ajax的callback参数部分添加一个scope:text,把回调函数的scope指向text,它的作用就是把doSuccess函数里的this指向text对象。然后再把doSuccess里改成this.dom. value,这样就可以了。如果想再次在回调函数里用某个对象,必须配上scope,这样就能在回调函数中使用this对它进行操作了。

为success添加createDelegate()。

function doSuccess(response) {this.dom.value = response.responseText;}

Ext.lib.Ajax.request(
'POST',
'08.txt',
{success:doSuccess.createDelegate(text)},
'param=' + encodeURIComponent(text.dom.value)
);


createDelegate只能在function上调用,它把函数里的this强行指向我们需要的对象,然后我们就可以在回调函数doSuccess里直接通过this来引用createDelegate()中指定的这个对象了。它可以作为解决this问题的一个备选方案。

如果让我选择,我会尽量选择scope,因为createDelegate是要对原来的函数进行封装,重新生成function对象。简单环境下,scope就够用了,倒是createDelegate还有其他功能,比如修改调用参数等。


2、再通过几个简单的例子来解释:

code is below:

  

<html>
<head>
<script>
var p1 = {
name: 'p1',
fn: function() {
var scope = this.scope? this.scope:this;
alert(scope.name)
}
};
var p3 = {
name: 'p3'
};
var p2 = {
name: 'p2',
//scope: p1, // assign scope
fn: p1.fn // copying p1.fn loses its scope
};
p1.fn();
p2.fn();
</script>
</head>
</html>
Running that code will pop up two times: 'p1' and 'p2' ... even though p2's fn uses the fn from p1 but since it is run within p2 scope, it
displays p2's name.
Uncomment the scope config in p2 and refresh. Now the page will pop up 'p1' two times.
Set the scope config option to point to p3 and refresh. Now the page will pop up 'p1' and 'p3'.
All the above behaviors are made possible since the p1.fn function takes the scope into consideration. Ext, on the other hand, uses a
分享到:
评论

相关推荐

    ext学习文档

    - **Javascript中的作用域(scope)**: 解释了作用域的概念及其在EXT中的重要性。 #### 5. EXT程序规划入门 - **事前准备**: 强调了在开始编程之前需要做哪些准备工作。 - **需要些什么?**: 列举了构建EXT应用...

    ext api,ext 学习笔记,SWFUpload_多文件上传及部分工具

    在EXT学习笔记中,"What_is_that_Scope_all_about2.htm"可能涉及的是JavaScript作用域和EXT中的scope概念,这对于理解和调试EXT应用中的事件处理和回调函数至关重要。"JsonTool.htm"可能介绍了EXT如何与JSON数据进行...

    Ext 开发指南 学习资料

    8.6. 小声说说scope 8.7. 菜单和工具条 8.7.1. 至简至廉的菜单 8.7.2. 丰富一点儿的多级菜单 8.7.3. 单选多选,菜单里搞这套 8.7.4. 小把戏,定制好的菜单 8.7.5. SplitButton让按钮和菜单结合 8.8. 蓝与灰,切换...

    ext学习小例

    通过以上知识点的学习,初学者可以快速上手 Ext JS,并实现一些基本的前端功能,例如显示消息提示框、创建输入框以及创建窗口等。需要注意的是,在实际开发过程中,建议遵循最佳实践和官方文档的指导来确保代码质量...

    EXT中文教程

    ### EXT中文教程知识点详解 #### 1. EXT简介与核心概念 EXT,即Ext JS,是一种基于JavaScript的开源框架,用于构建复杂的Web...通过深入学习其核心概念和实践技巧,开发者能够快速提升Web应用的开发效率和用户体验。

    ext-word文档

    #### Javascript中的作用域(scope) 作用域是JavaScript中的一个重要概念,决定了变量的可访问范围。在ExtJS中,理解作用域对于编写正确的事件处理函数至关重要。例如,当绑定事件时,需要确保处理函数能够在正确的...

    EXT-In-FirstStep

    根据给定的文件信息,我们可以提炼出一系列与EXT框架相关的知识点,这些知识点涵盖了EXT的各个方面,从基础到高级应用,适合不同层次的学习者。以下是基于标题、描述、标签及部分内容整理的关键知识点: ### EXT...

    ext培训第二讲.doc

    在开始EXT的学习之前,首先需要搭建一个基本的Web开发环境。本章节主要介绍如何创建一个Web项目,并配置必要的EXT资源文件。 **步骤详解:** - **创建Web项目**:使用开发工具(如Eclipse)新建一个Web项目,命名...

    EXT 中文帮助手册

    13 适配器Adapters 13 核心Core 13 Javascript中的作用域(scope) 13 事前准备 13 定义 13 正式开始 14 window对象 14 理解作用域 15 变量的可见度 15 EXT程序规划入门 16 事前...

    EXT最新使用手册

    - **作用域(Scope)**: 讨论JavaScript中的作用域问题及其在EXT中的应用。 #### 9. EXT程序规划入门 - **准备工作**: 需要了解的基础知识和工具。 - **实现步骤**: - 创建基本的HTML和JavaScript文件。 - 实现...

    EXT简体中文参考手册(PDF&CHM电子档)

    Javascript中的作用域(scope) 13 事前准备 13 定义 13 正式开始 14 window对象 14 理解作用域 15 变量的可见度 15 EXT程序规划入门 16 事前准备 16 需要些什么? 16 applayout.html 16 applayout.js 17 公开Public...

    learning ext js 中文版之在对话框中添加图标和按钮事件

    "学习EXT JS中文版之在对话框中添加图标和按钮事件"这一主题深入探讨了如何为EXT JS的对话框(Modal Dialog)增添视觉吸引力和功能性,通过添加图标和响应式按钮事件来提升用户体验。 EXT JS中的对话框通常用于显示...

    EXT 中文手册

    13 适配器Adapters 13 核心Core 13 Javascript中的作用域(scope) 13 事前准备 13 定义 13 正式开始 14 window对象 14 理解作用域 15 变量的可见度 15 EXT程序规划入门 16 事前...

    ext监听事件方法[初级篇]

    除此之外,`addListener`和`on`还有其他可选参数,如`scope`(确定事件处理函数运行时的上下文对象)和`fn`(可以是事件处理函数的名字,而不是函数对象本身)。此外,还可以设置`delay`、`single`(只执行一次)、`...

    extjs学习笔记

    ### extjs学习笔记知识点梳理 #### 一、Ext.MessageBox 方法详解 Ext.MessageBox 是 ExtJS 库中的一个重要组件,用于向用户展示消息对话框。它包含了多种类型的消息对话框,每种对话框都有其特定用途。 - **Ext....

    extjs帮助文档

    - `Ext.util.DelayedTask.delay(delay, scope, args)`:延迟执行任务。 - `Ext.util.DelayedTask.cancel()`:取消延迟任务。 #### 二十一、Ext.util.TaskRunner类(第21页) - **概述**:Ext.util.TaskRunner类...

Global site tag (gtag.js) - Google Analytics