关于JavaScript中this的使用,这是一个由来已久的问题了。我们这里就不介绍它的发展历史了,只结合具体的例子,告诉大家可能会遇到什么问题,在遇到这些问题时EXT是如何解决的。在使用EXT时,最常碰到的就是使用Ajax回调函数时出现的问题,如下面的代码所示。 现在的HTML 页面中有一个text输入框和一个按钮。我们希望按下这个按钮之后,能用Ajax去后台读取数据,然后把后台响应的数据放到text中,实现过程如代码清单10-6所示。 代码清单10-6 Ajax中使用回调函数 ? Ext.onReady(function(){ 在上面的代码中,Ajax已经用Ext.get("text")获得了text,以为后面可以直接使用,没想到回调函数success不会按照你写的顺序去执行。当然,也不会像你所想的那样使用局部变量text。实际上,如果什么都不做,仅仅只是使用回调函数,你不得不再次使用 Ext.get("text")重新获得元素,否则浏览器就会报text未定义的错误。 在此使用Ext.get("text")重新获取对象还比较简单,在有些情况下不容易获得需要处理的对象,我们要在发送Ajax请求之前获取回调函数中需要操作的对象,有两种方法可供选择:scope和createDelegate。 为Ajax设置scope。 在 Ajax的callback参数部分添加一个scope:text,把回调函数的scope指向text,它的作用就是把doSuccess函数里的 this指向text对象。然后再把doSuccess里改成this.dom. value,这样就可以了。如果想再次在回调函数里用某个对象,必须配上scope,这样就能在回调函数中使用this对它进行操作了。 为success添加createDelegate()。 ? Ext.lib.Ajax.request( createDelegate 只能在function上调用,它把函数里的this强行指向我们需要的对象,然后我们就可以在回调函数doSuccess里直接通过this来引用 createDelegate()中指定的这个对象了。它可以作为解决this问题的一个备选方案。 如果让我选择,我会尽量选择scope,因为createDelegate是要对原来的函数进行封装,重新生成function对象。简单环境下,scope就够用了,倒是createDelegate还有其他功能,比如修改调用参数等。
<input type="text" name="text" id="text">
<input type="button" name="button" id="button" value="button">
function doSuccess(response) {
text.dom.value = response.responseText;
}
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)
);
});
});
?function doSuccess(response) {
this.dom.value = response.responseText;
}
Ext.lib.Ajax.request(
"POST",
"08.txt",
{success:doSuccess,scope:text},
"param=" + encodeURIComponent(text.dom.value)
);
?function doSuccess(response) {
this.dom.value = response.responseText;
}
"POST",
"08.txt",
{success:doSuccess.createDelegate(text)},
"param=" + encodeURIComponent(text.dom.value)
);
详细解决方案
extjs中scope的功用
热度:24 发布时间:2012-11-03 10:57:42.0
Tag标签: Ext,scope,createDelegate,this,参数传递
相关解决方案
- spring @Scope("prototype")注解更新有关问题,寻求帮助
- Extjs grid 失去选中行的列数据
- extjs 后台有数据,但是返回到页面为空,jsonStore加载错误,这是咋回事
- 【EXTJS】iframe里嵌套ext.window,怎样使ext.window弹出到iframe外,该怎么解决
- Tomcat + extjs 入门有关问题
- extjs ColumnModel 怎么实现表格中的数据小数点对齐
- Extjs 变量前的一个加号代表什么意思?解决方法
- extjs grid 怎么实现 行选中变色
- EXTJS grid的getView的refresh步骤报this.grid为空或不是对象
- EXTJS grid的getView的refresh方法报this.grid为空或不是对象解决办法
- ExtJs ComboBox 上拉数据较多时,怎么提供模糊搜索
- extjs window 弹出框有关问题 怪事
- ExtJs ComboBox 下拉数据较多时,怎么提供模糊搜索
- jsp:useBean Scope 问题
- EXTJS GridPanel怎么设置多选
- EXTJS 在 IE 中 数据丢失。求解决方法。
- extjs grid 动态设置行单元格可编辑
- EXTJS DateField 效果显示解决方法
- Extjs Menu 实现动态多级菜单
- ExtJs ComboBox 上拉数据较多时,怎么提供模糊搜索
- Extjs TreeStore 的施用
- Extjs TreeStore 的应用
- 会用jquery,dwr,再有没有必要学习dojo,extjs
- extjs+php ,大家来看看是小弟我的json输出的有关问题,还是小弟我的extjs没有写对呢
- JqueryUI CSS Scope:Dialog跟Datepicker
- extjs grid表的显示有关问题
- extJS 在IE8里边什么都不显示
- EXTJS 显示图片有关问题 来个大神指教下 多谢
- Extjs 前后台数据交互有关问题
- ExtJS 怎么嵌入百度mapAPI