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

转载于:https://www.cnblogs.com/yin-jingyu/archive/2011/08/03/2126460.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python某公司为员工发放奖品_python 练习2

#######假定有下面这样的列表:names [fentiao, fendai, fensi, apple]输出结果为:I have fentiao, fendai, fensi and apple.names [fentiao, fendai, fensi, apple]print I have ,.join(names[:-1]) and names[-1]######系统里面有用户 用户有密码users [root,westos…

SIP 协议 理解

SIP主要支持以下5个方面信令技术功能&#xff1a; 用户定位&#xff1a;确定通信所使用的终端系统位置。主要是和sip服务器实体中的注册服务器和非sip实体的 位置服务器相关&#xff0c;每个用户在上线的所在的sip实体&#xff0c;会将该用户的sip号&#xff08;sip域中的唯一…

sklearn中的支持向量机SVC

官方链接 sklearn.svm.SVC — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC该方法是基于libsvm&#xff08;支持向量机库&#xff09;实现的 libsvm官网 LIBSVM -- A Library for Support Vec…

python学习正则表达式_Python学习教程(Python学习路线):正则表达式—第二讲

Python学习教程(Python学习路线)&#xff1a;正则表达式&#xff01;前面也有跟大家分享关于正则表达式的Python学习教程&#xff0c;但是有伙伴说还是没完全吸收&#xff01;这些是很正常的&#xff0c;正则表达式难吗&#xff1f;肯定难&#xff01;不是一次教程就能完全掌握…

ArcGIS之GP服务发布

模型构建器官方解释&#xff1a; 链接 什么是模型构建器&#xff1f; 1.模型构建器是一个用来创建、编辑和管理模型的应用程序。模型是将一系列地理处理工具串联在一起的工作流&#xff0c;它将其中一个工具的输出作为另一个工具的输入。也可以将模型构建器看成是用于构建工…

认知与设计:理解UI设计准则——序

交互计算机系统的设计不仅仅是门艺术&#xff0c;也是&#xff08;至少追求成为&#xff09;一门科学。好吧&#xff0c;实际上不是科学&#xff0c;但可以说是一门计算机和认知学的交叉工程学科&#xff0c;基于科学的技术方法创造满足指定需求的交互系统。   就像汽车、建筑…

开源的SIP协议栈 PJSIP

PJSIP是一个开放源代码的SIP协议栈。它支持多种SIP的扩展功能&#xff0c;目前可说算是最流行的sip协议栈之一了。 下面列出其重要的几种优点&#xff1a; 1&#xff09;代码层次非常清晰&#xff0c;从低级到高级都提供了很方便的接口供开发&#xff1b; 2&#xff09;提供相当…

卸载idea_IDEA 不为人知的 5 个骚技巧!真香!

来自公众号&#xff1a;Java中文社群工欲善其事&#xff0c;必先利其器&#xff0c;磊哥最近发现了几个特别棒的 IDEA“骚”技巧&#xff0c;已经迫不及待的想要分享给你了&#xff0c;快上车...1.快速补全行末分号使用快捷键 Shfit Ctrl Enter 轻松实现。2.自带的 HTTP 请求…

网格搜索支持向量机运行结束不了

from sklearn import svm, model_selection import pandas as pd import numpy as np #支持向量机主要调节的参数有&#xff1a;C、kernel、degree、gamma、coef0。 #C 默认 1.0正则化参数。 #kernel {‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, defaul…

Oracle高级SQL培训与讲解

1 With子句 1.1 学习目标 掌握with子句用法&#xff0c;并且了解with子句能够提高查询效率的原因。 1.2 With子句要点 1. with子句的返回结果存到用户的临时表空间中&#xff0c;只做一次查询&#xff0c;反复使用&#xff0c;提高效率。2. 如果定义了with子…

理解会话

一 会话的初始化 Session用于进行媒体流传送。当一方发出请求&#xff0c;而另外一方或多方接受请求并通过信令交互成功后才能建立会话。 一次呼叫只能建立一次会话&#xff0c;但可以建立多个对话&#xff08;Dialog&#xff09;&#xff0c;因为接受请求的可能不止一个。 …

st语言 数组的常用方法_ST语言编程手册

ST语言编程手册目录1. ST基本原理.......................................................................................................... 61.1语言描述..........................................................................................................…

arcgis矢量之间的空白如何快速填充

填充之前 中间有空白处需要填充完整&#xff08;前提时候得是一个图层&#xff0c;如果是两个图层就无法填充&#xff09; 点击开始编辑 点击创建要素 点击自动完成面 开始绘制 绘制完成如下

Session、Dialog和Transaction的区别

会话&#xff08;Session&#xff09;跟SDP内信息相关。在SDP中&#xff0c;多媒体会话指的是一组的媒体发送方和接收方及媒体流从发送方流向接受方。会话是由SDP里的username, session id, network type, address type,和源处地址元素来确定的。只有当媒体协商成功后&#xff…

从委托而起(二)认识委托

新建一个控制台应用程序,这个程序的作用是为一个字符串改变样子,所以起个名字叫Costumeball吧.嘉宾(字符串)通过一个个化妆间(函数)变得漂漂亮亮或奇奇怪怪后一起唱歌跳舞.好享受.声明一个委托,委托一般出现在类之外,本例随便delegate void Prink(string str);创建与委托管理的…

argis中4波段影像变3波段

解决方法&#xff1a;波段合成 4波段影像属性 工具 结果

SIP结构

SIP结构 SIP单元&#xff1a; UAC、UAS、Stateful proxy、Statelessproxy和registrar五种。 SIP是分层结构&#xff0c;每层之间是相对独立的。如下 -------------------------------------------- | TransactionUser&#xff08;TU&#xff09; | …

python批量压缩图片

#coding:utf-8 from PIL import Image import os#图片压缩批处理 def compressImage(srcPath,dstPath):for filename in os.listdir(srcPath):#如果不存在目的目录则创建一个&#xff0c;保持层级结构if not os.path.exists(dstPath):os.makedirs(dstPath)#拼接完整的文件或文件…

idea怎么将本地文件和远程git对比_IDEA新建本地项目关联远程git仓库

现在远程git仓库创建一个repository&#xff0c;然后本地创建项目&#xff0c;最后进行关联。三板斧&#xff0c;打完收工。第一步、第二步地球人都知道&#xff0c;略过不表&#xff0c;第三步比较关键&#xff0c;举个例子&#xff1a;0、创建本地Git仓库&#xff1a;VCS -&g…

转:min(x,y)高效算法

命题&#xff1a;给定整数x,y&#xff0c;计算较小值m。 两个数的差异&#xff0c;在于他们的差&#xff0c;于是想到计算z x - y&#xff0c;我想也许可以利用这个中间值&#xff0c;利用一些巧妙的位运算求出&#xff0c;可是貌似还是比较困难。于是我打算重新理一下思路…