Я получил несколько методов (methA
, methB
...), которые должны вызывать тот же метод methMain
в Javascript. Этот метод methMain
затем должен извлечь некоторые данные и, когда это будет сделано, сделать обратный вызов метода, который его вызвал (methA или MethB ...).
Я могу успешно создать указатель / ссылку на метод, используя то, что написано здесь: Как передать ссылку на функцию с параметрами?
Это решение, как и все другие, которые я видел, похоже, не работает в текущей области.
Этот код не будет работать:
function TestStructure() {
this.gotData = false;
//define functions
this.methA = function (parA) { };
this.methB = function (parb) { };
this.createFunctionPointer = function (func) { };
this.createFunctionPointer = function (func /*, 0..n args */) {
var args = Array.prototype.slice.call(arguments, 1);
return function () {
var allArguments = args.concat(Array.prototype.slice.call(arguments));
return func.apply(this, allArguments);
};
};
this.methA = function (parA) {
alert('gotData: ' + this.gotData + ', parA: ' + parA);
if (this.gotData == false) {
var fp = this.createFunctionPointer(this.methA, parA);
this.methMain(fp);
return;
}
//...do stuff with data
}
this.methB = function (parB) {
alert('gotData: ' + this.gotData + ', parB: ' + parB);
if (this.gotData == false) {
var fp = this.createFunctionPointer(this.methB, parB);
this.methMain(fp);
return;
}
//...do stuff with data
}
this.methMain = function (func) {
//...get some data with ajax
this.gotData = true;
//callback to function passed in as parameter
func();
}
}
var t = new TestStructure();
t.methA('test');
Когда methMain
выполняет обратный вызов func (methA
или methB
), переменная this.gotData
не будет установлена.
Есть ли решение этой проблемы или мне нужно переосмыслить дизайн?
Я хочу сделать это, чтобы получить данные с помощью ajax без блокировки с помощью async: false.