Объектный метод как обратный вызов jqGrid

#javascript #methods #jqgrid #callback

#javascript #методы #jqgrid #обратный вызов

Вопрос:

У меня есть объект с методом, который я хочу сделать обратным вызовом в grid. Как я могу это сделать?

Нерабочий пример кода:

 var GridHolder = function() {
    //...
    this.lastSel = null;
    //...
};
GridHolder.prototype = {
   //...
    someAction : function(id){ /*doSomeWork();*/},
    rowSelect : function(id){
        this.someAction(id); // failed
        if(id amp;amp; id !== this.lastSel){
            jQuery('#grid_id').restoreRow(this.lastSel);
            this.lastSel=id;
        }
        jQuery('#grid_id').editRow(id, true);
    }
   //...
};
var gridHolder = new GridHolder();
jQuery('#grid_id').jqGrid({
    //...
    onSelectRow: gridHolder.rowSelect,
    //...
});
  

На данный момент обратные вызовы вызываются jqGrid с помощью ‘call’, и это заменяет ‘this’ в методах.

Т.е.:

 if( $t.p.onSelectRow amp;amp; onsr) { $t.p.onSelectRow.call($t, pt.id , stat); } // this === $t in callback instead of gridHolder
  

Ответ №1:

 var gridHolder = new GridHolder();
jQuery('#grid_id').jqGrid({
    //...
    onSelectRow: function(id) { gridHolder.rowSelect(id); },
    //...
});
  

должен выполняться в правильном контексте.