[英]Javascript callback within class loses binding
我的類遇到問題,我將回調函數設置為在ajax請求后觸發,除了回調然后具有this =窗口而不是this =調用類之外,此方法工作正常。 我嘗試擺弄綁定等都無濟於事。 任何幫助表示贊賞。
<?php
if (isset($_POST['id'])){
echo json_encode(array('key' => 'val'));
die;
}
?>
<script type="text/javascript" src="/linkup/js/mootools-core-1.4.3-full-compat-yc.js" charset="utf-8"></script>
<script type="text/javascript" src="/linkup/js/mootools-more-1.4.0.1.js" charset="utf-8"></script><script>
var myClass = new Class({
blah: function(){
console.log('this worked ok');
},
foo: function(){
this.blah(); // at this point it is failing with "unknown function"
},
bar: function(){
this.reqJSON({id:1,req:'grabpoints'},this.foo);
},
// data - an aray containing some data to post {id:1,req:'grabpoints'}
// onS - a function to fire on return of data
reqJSON: function(data,onS){
if (this.jsonRequest) this.jsonRequest.cancel();
this.jsonRequest = new Request.JSON({
url: 'test.php',
onRequest: function (object){
console.log('sending json');
},
onSuccess: function (object){
console.log('json success');
onS(object);
}
}
).post(data);
},
});
var o = new myClass();
o.bar();
this
絕不是函數的繼承范圍(即閉包)的一部分,而是由函數onS(object)
在調用函數時確定的。 以這種方式調用的功能就是那個功能。 您需要調用this.onS(object)
,但這在您的情況下不起作用,因為onSuccess
函數也不知道this
。
要撥打與最外層的對象作為富/ ONS功能this
必須參考保存到它在另一個變量,通常被稱為that
:
reqJSON: function(data,onS){
var that = this;
...
onSuccess: function (object){
console.log('json success');
that.onS(object);
}
改變這個
bar: function(){
this.reqJSON({id:1,req:'grabpoints'},this.foo);
}
至 :
bar: function(){
var self = this;
this.reqJSON({id:1,req:'grabpoints'},self.foo);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.