2013-11-18 4 views
0

В типичных JavaScript, я использую этот шаблон при выполнении в Ajax вызова:машинопись обратных вызовов при использовании плагинов сторонних

myFunction() { 
    var self = this; 
    $.ajax({ 
    // other options like url and stuff 
    success: function() { 
     self.someParsingFunction 
    } 
    } 
} 

Я использую плагин jquery.form.js: http://malsup.com/jquery/form/#ajaxForm

при размещении моей формы, я это сделал:

var successCallback: (data: any, textStatus: string, jqXhr: JQueryXHR) => void = this.handleResponse; 
       var options = { 
        url: "import/upload", 
        type: "POST", 
        dataType: "json", 
        success: successCallback 
       }; 

проблема в моем методе handleResponse, я не могу назвать другие функции моим «класса» с помощью this.someParsingFunction. Что я в итоге сделал:

handleResponse(data, statusText, jqXhr) { 
      window.tempContext.parseInputData(data); 
     } 

Вид хакки по-моему. Есть ли способ обойти это в машинописном тексте? Заранее спасибо!

ответ

1

Вы должны использовать функцию стрелки:

myFunction() { 
    $.ajax({ 
    // other options like url and stuff 
    success: (a,b,c)=>{    // Arrow function 
     this.someParsingFunction // Now this is lexically scoped. You don't need to create self 
    } 
    } 
} 
+0

Как бы я сделать это как обратный вызов, хотя, так как машинопись компилятор жалуется, что '() =>' не имеют ожидаемые параметры обратного вызова. Обратный вызов jquery.form.js должен иметь эти 3 параметра для обратного вызова успеха. – Crystal

+0

@Crystal просто поставил их в качестве параметров. См. Обновленный ответ – basarat

+0

, который имеет смысл, за исключением того, что компилятор tsc жалуется на меня, если у меня нет точных параметров, которые принимает плагин. Я мог бы модифицировать плагин, но я надеялся, что вокруг будет еще один способ. – Crystal

Смежные вопросы