一般我们在ajax提交数据时会这样写:
func: function()
{
var me = this;
Ajax.get(id, {
sucess: function(obj){
me.doSomeThing(obj);
//.........
}
})
}
我们必须将this暂存起来,因为在callback中this已经不是当前的上下文了,而在sencha touch中我们可以这样:
func: function()
{
Ajax.get(id, {
sucess: function(obj){
this.doSomeThing(obj);
//.........
},
scope: this
})
}
我们通过指定scope就不用手动去暂存this指针了,callbak中的this自动变成了当前上下文,因为本人js菜鸟,以前只是会用,但是今天重新了一个自己的回调模块,也想这样让调用方传递一个scope来改变他们的this指针,但是却不知道怎么实现,于是充满好奇的打开了sencha touch的事件基类Ext. Base,里面有一个关键性js函数apply,于是上网搜索,恍然大悟(高手勿喷,以前不知道这个函数- -!)
所以如果你自己写了一个Ajax.get(id, obj)库函数,可以这么写:
Ajax.get = function(id, obj){
//.....巴拉巴拉巴拉
var me = obj.scope || this;
obj.success.apply(me, arguments);
//......巴拉巴拉巴拉
}
这样,在以后调用这个函数的时候,只要指定了scope字段,在回调函数中this即指向了scope对象,这里obj.success.apply(me, arguments)的意思可以简单的理解为将obj.success方法的this指向me,并将参数列表arguments传递到obj.success.