2012-06-14 5 views
0

У меня есть следующая конструкцияДоступ к переменным объекта в функции обратного вызова

function crudDataTable() 
{ 
    this.addEditFormContainerSelector = ''; 
    this.paginationType = "full_numbers"; // Provide Pagination Type 
    this.processing = true; 
    this.serverSide = true; //I want this this to be accessible in fnRowCallback below: 

    this.create = function(){ 

     this.tableInstance = $(this.tableLocationSelector).DataTable({ 
      "sPaginationType": this.paginationType 
      fnRowCallback:function(nRow, aData) { 
       // "this" from crudDataTable should be accessible here 
      } 
     }) 
    } 
} 

Я хочу this от crudDataTable быть доступным в fnRowCallback.

Как я могу это получить ?, также fnRowCallback уволен компонентом datatable, так что это не в моем распоряжении. Как я могу сделать this доступен под fnRowCallback.

Или, если это невозможно, то каковы другие подходы к его достижению?

Я пытаюсь написать компонент, где пользователи этого компонента могут просто настроить свои переменные и вызвать функцию create. Перед нами стоит задача доступа к this в функции fnRowCallback.

Спасибо.

ответ

2

Вы можете сохранить ссылку на this снаружи обратного вызова:

var table = this; 
this.tableInstance = $(this.tableLocationSelector).DataTable({ 
    "sPaginationType": this.paginationType, 
    fnRowCallback: function(nRow, aData) { 
     //Use `table` to refer to the instance of `crudDataTable` 
    } 
}); 

В качестве альтернативы, вы можете использовать ES5 bind method (но имейте в виду, что старые браузеры не поддерживают):

this.tableInstance = $(this.tableLocationSelector).DataTable({ 
    "sPaginationType": this.paginationType, 
    fnRowCallback: function(nRow, aData) { 
     //Use `this` to refer to the instance of `crudDataTable` 
    }.bind(this); 
}); 
+0

будет ли эта 'var table' доступна внутри fnRowCallback? – linuxeasy

+0

Да, было бы. –

+0

Спасибо за отличный ответ и предоставим его альтернативы! – linuxeasy

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