在不使用箭头功能的情况下获取函数内部的主类对象

时间:2018-07-13 10:19:35

标签: javascript jquery angular typescript

在我的有角度的项目中,我正在使用具有行分组和行回调的数据表。

数据表选项

elements = np.array([])
elements_step = 5
constant_sum = 1000
upper_limit = 10000
for i in range(1000):
    elements = np.append(elements, constant_sum)
    l = np.arange(0, len(elements), elements_step)
    ortalama = np.mean(elements[l])
    if ortalama >= upper_limit:
        print("Large ortalama")

在我的数据表选项中,我有一个openPositionDatatableOptions = { sDom: 'rt<"bottom"p>', ajax: (data, callback, settings) => { this.service.getOpenPositions() .map(data => data.json().data).catch(this.handleError) .subscribe(jsondata => { this.openPositionsData = jsondata; jsondata.forEach(element => { if (element.side === 'SLD') { element.openQuantity = '-' + element.openQuantity; } element['delta'] = 0; element['pl'] = 0; }); if (jsondata) { callback({ aaData: jsondata }); } }, error => { this.notifiicationAlert('Some Error Occured While Retrieving Positions Data', 'WARNING'); }); }, columns: [ { data: 'account.brokerId' }, { data: 'contract.localSymbol' }, { data: 'openQuantity' }, { data: 'delta' }, { data: 'pl' }, { data: null, orderable: false, defaultContent: '<a class="fa fa-remove" style="color:#8B0000"></a>', responsivePriority: 2 } ], //Grouping By Row Logic "columnDefs": [ { "visible": false, "targets": 0 } ], "order": [[0, 'asc']], "drawCallback": function (settings) { var api = this.api(); var rows = api.rows({ page: 'current' }).nodes(); var last = null; api.column(0, { page: 'current' }).data().each(function(group, i) { if (last !== group) { $(rows).eq(i).before( '<tr class="group"><td colspan="5"><div class="row"><div class="col-lg-6" style="text-align:left">' + group + '</div><div class="col-lg-6" style="text-align:right"><button class="datatableGroupingBtn btn btn-default btn-xs fa fa-remove" value='+group+'></button></div></div></td></tr>' ); last = group; } }); // jQuery button click event $(".datatableGroupingBtn").on('click',(value)=>{ var clickedRow = value.currentTarget.value; }); }, //Grouping By Row Logic Ends rowCallback: (row: Node, data: any | Object, index: number) => { $('a', row).bind('click', () => { this.service.closePosition(data.id).catch(this.handleError).subscribe( res => { if (res.status == 200) { //TODO Re-implement this using web-socket if ($.fn.DataTable.isDataTable(this.service.openPositionTableAlias)) { const table = $(this.service.openPositionTableAlias).DataTable(); if (this.openPositionsData.length > 1) { $('td', row) .parents('tr') .remove(); } else { table.clear().draw(); } this.notifiicationAlert('Position Closed Successfully', 'SUCCESS'); } } }, (error: Response) => { this.notifiicationAlert('Some Problem While Closing The Position', 'WARNING'); } ); }); return row; } }; 函数,用于对行进行分组。在函数内部,我在drawCallback上还有一个jquery点击事件

#datatableGroupingBtn

现在我的要求是,我必须访问类级别"drawCallback": function (settings) { var api = this.api(); var rows = api.rows({ page: 'current' }).nodes(); var last = null; api.column(0, { page: 'current' }).data().each(function(group, i) { if (last !== group) { $(rows).eq(i).before( '<tr class="group"><td colspan="5"><div class="row"><div class="col-lg-6" style="text-align:left">' + group + '</div><div class="col-lg-6" style="text-align:right"><button class="datatableGroupingBtn btn btn-default btn-xs fa fa-remove" value='+group+'></button></div></div></td></tr>' ); last = group; } }); // jQuery button click event $(".datatableGroupingBtn").on('click',(value)=>{ var clickedRow = value.currentTarget.value; }); } ,它是this的jquery click事件绑定内的My OrderComponent类对象。我知道,如果我在#datatableGroupingBtn上使用箭头功能,可以做到这一点,但是如果使用,则其他必需功能将无法正常工作,因为您可以看到我在drawCallback级别使用了一些属性function()功能。

我的组件

drawCallback

2 个答案:

答案 0 :(得分:0)

在jQuery事件绑定的方法中,声明一个变量,如

let self = this;

现在您应该可以在jquery click事件绑定中使用此变量

答案 1 :(得分:0)

在声明openPositionDatatableOptions变量后,在构造函数中分配self

openPositionDatatableOptions : any;

constructor()
{
    const self = this;

    this.openPositionDatatableOptions = {

    //....

    "drawCallback": function (settings) {
  //....
  // jQuery button click event
  $(".datatableGroupingBtn").on('click',(value)=>{
    var clickedRow = value.currentTarget.value;
    console.log(self);//<=== self is your class instance
  });
},


}