У меня есть скрипка с ошибкой -> http://jsfiddle.net/Osoascam/AkZZr/6/ (Это версия без ошибки) -> http://jsfiddle.net/Osoascam/AkZZr/7/
В нем есть модуль (например, основное приложение), Module.AjaxInterface
, который работает с вызовами Ajax, Module.Modules.Inbox
(который выполняет задачи, связанные с почтовым ящиком) и Module.Pages .Gmail
, который имеет дело с несколькими модулями для отображения страницы.Все это делается с помощью шаблона модуля.
Как видите, обратных вызовов ОЧЕНЬ МНОГО. Я хотел бы знать, что происходит с этим
на этих звонках ...
Я не понимаю, что происходит с этой
ссылкой, и как я могу ее сохранить :
getMessages: function(params) {
var parameters = params || {};
params = {
// Please note I'm using this, which equals the module
successCallback: this.pretendRender,
successCallbackParameters: parameters,
json: params.json
};
var test = new Module.AjaxInterface(params);
test.ajaxCall();
},
Итак, вызов функции внутри самого модуля работает ... Затем он вызывает test.ajaxCalls
, который в ответ вызывает pretendRender ()
. Теперь на pretendRende
r у меня есть это:
pretendRender: function(data, parameters) {
// LINE 106 that is causing the ERROR
// It says "this.addColor() is not defined and THIS = window now
data.color = this.addColor();
parameters.successCallback(data);
},
addColor: function() {
return "#AD9";
}
Мой вопрос ... Что происходит с этой
ссылкой? Почему оно меняется на окно
? Как я могу это исправить? Я знаю, что могу использовать call
или apply
, но функция pretendRender
вызывается на AjaxInterface
, а ссылка на Modules.Inbox
был утерян (если я не использую вызывающего абонента
, что я не могу использовать в "строгом"
). Я знаю, что могу передать это
в AjaxInterface
, чтобы сохранить его, но на самом деле я хочу по-настоящему понять, что происходит, и создать элегантное решение.