`

extjs中scope的作用

阅读更多

关于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还有其他功能,比如修改调用参数等。

Tag标签: Ext,scope,createDelegate,this,参数传递
分享到:
评论

相关推荐

    EXTJS 中文手册 电子书

    Javascript中的作用域(scope) ............................................................................... 15 事前准备..................................................................................

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

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

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

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

    extjs-graphql-app:样例应用程序说明了如何在ExtJS中使用GraphQL

    如何在ExtJS中使用GraphQL 这是基于样本ExtJS的文章。 开始开发环境 登录到Sencha NPM存储库 npm login --registry=https://npm.sencha.com/ --scope=@sencha 安装依赖项 npm install 启动应用程序 npm start

    extjs-desktop

    MyDesktop.Test = Ext.extend(Ext.app.Module, { id:'bb-cc',//DIV中的ID值 init : function(){ this.launcher = { text: 'abcdefg',//菜单中显示的文本 iconCls:'tabs', ... scope: this } },

    Extjs优化(二)Form表单提交通用实现

    代码如下: /** * 提交表单 */ function $postForm(a) { if (a.formPanel.getForm().isValid()) { var b = a.scope ? a.scope: this; a.formPanel.getForm().submit({ scope: b, url: a.url, method: “post”, ...

    ExtJs4.1.0 A(Web版) 有部分是中文版

    迭代一个对象,在每个迭代上调用给定的回调函数 在回调函数中返回 false 可以停止迭代. ... Ext.Object view sourcefromQueryString( String queryString, [Boolean recursive] ) : Object 将查询字符串转换回对象...

    mycustomer:具有Spring Framework,Spring Boot,JPA的Ext JS 6示例应用程序

    先决条件ExtJS订阅安装Java: : 安装Node.js: : 登录名: npm login --registry=https://npm.sencha.com --scope=@sencha发展克隆存储库cd mycustomer/client7 npm install npm start 在另一个外壳cd mycustomer ./...

    使用Struts的Action来对数据库进行增、删、改、查四项操作(源码)

    使用Struts的Action来对数据库进行增、删、改、查四项操作 &lt;br/&gt;1、数据库MySQL,创建数据库 Pagination MySQL.sql用来创建表结构 &lt;br/&gt;连接方式有两种,一种直接JDBC,一种通过连接池,代码中有说明...

    bigMom:基于angular框架和extJS的配置化思想,自己研发了一套新的配置化、组件化、适用于快速开发后台管理系统的一套框架

    增加该层的主要原因是,后台系统中,由于业务形态、页面样式、界面功能等都是高度可重用的。在本人看来,大部分是由查询组件、结果组件(大部分为table形式)和操作组件这三部分构成)。 故提出了配置化编程的概念...

    Extjs Ext.MessageBox.confirm 确认对话框详解

    方法,具有两个按钮“是”和“否”如果为其提供一个回调函数,则该函数将在单击按钮后被调用(包括右上角的推出按钮),所单击按钮的id将被作为唯一的参数传递到回调函数中。 调用格式: confirm&#40;String title,...

    NVKindEditor3.5.4面向对象版(修改)

    修改后的作用: 通过修改后该版本可以灵活地实例化对象,因此可以更加好地整合到EXTJS框架,目前我已经将该控件集成到了我们用的EXTJS框架,该控件的用法和EXT内的控件一样的使用,下面为一点相关代码: getValue:...

    EXT2.0中文教程

    8.6. 小声说说scope 8.7. 菜单和工具条 8.7.1. 至简至廉的菜单 8.7.2. 丰富一点儿的多级菜单 8.7.3. 单选多选,菜单里搞这套 8.7.4. 小把戏,定制好的菜单 8.7.5. SplitButton让按钮和菜单结合 9. 沉寂吧!我们要...

    EXT教程EXT用大量的实例演示Ext实例

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

    Ext 开发指南 学习资料

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

Global site tag (gtag.js) - Google Analytics