2012-05-31 41 views
0

這是不行的,但給你的想法:一個小部件需要使用它自己的方法作爲回調:的jQuery插件和內部回調

$.widget("me.mywidget", { 

    _create: function() { 
     this.call("mymodule", "myaction", {arg: this.options.value}, _parseData); 
    }, 

    _parseData: function(data) { 
     console.log(data); 
    }, 

    call: function(module, action, params, callback) { 
     var params = params || {}; 
     var url = "/" + module + "/" + action; 

     $.post(url, params, function(data) { 
      if (data.payload) callback(data.payload); 
     }); 
    }, 
}); 

目前,它拋出該異常:Uncaught ReferenceError: _parseData is not defined

這樣做的典型方法是什麼?

+1

this._parseData? – Pethical

+0

Jeez,那太容易了。我甚至沒有想過。 – Wells

+0

那麼,在回調中使用這個和'this'是窗口,而不是小部件對象,這是不可取的 – Wells

回答

0

的$。員額需要回調使用.apply.call,兩者都允許你設置什麼this範圍是在調用該函數自己callback打電話。

call: function(module, action, params, callback) { 
    var params = params || {}; 
    var url = "/" + module + "/" + action; 
    var self = this; 

    $.post(url, params, function(data) { 
     if (data.payload) callback.apply(self, [ data.payload ]); 
    }); 
}, 

或者:

call: function(module, action, params, callback) { 
    var params = params || {}; 
    var url = "/" + module + "/" + action; 

    $.post(url, params, function(data) { 
     if (data.payload) callbac.call(self, data.payload); 
    }); 
}, 

你可以read this for more information on apply/call