如何处理对象属性中的事件函数?

时间:2016-11-04 15:07:06

标签: javascript reactjs react-bootstrap-table

您好我正在使用bootstrap-table用于Web应用程序,我需要在单击表格行时转换到另一个URL。 “在行上单击”事件通过名为onRowClick的对象属性处理,您可以在其中为其分配一个以行数据作为参数的函数。

onRowClick :功能

分配一个回调函数,该函数将在行单击后调用。 此函数采用一个参数:row,它是您单击的行数据。

class SystemTable extends React.Component {
constructor() {
    super();

    this.state = {
        data: sampleSystems
    }
}

displaySystemInfo(row) {
    const systemId = row._id;
    this.context.router.transitionTo(`/system/${systemId}`);
    //browserHistory.push(`/system/${systemId}`);
}

render() {
    function osName(cell, row) {
      return cell.name;
    }

    function batteryCondition(cell, row) {
      return cell.condition;
    }

    var selectRowProp = {
      mode: "checkbox", 
      bgColor: "rgb(204, 230, 255)"
    };  

    var tableOptions = {
        sizePerPage: 5,
        deleteText: "✗ Delete Selected",
        paginationSize: 3,
        clearSearch: true,
        hideSizePerPage: true,
        onRowClick: function(row) {
            // here
        }
    };

    return (
    <BootstrapTable 
        className="react-bs-table"
        data={this.state.data.systems}
        striped={true}
        hover={true}
        pagination={true}
        selectRow={selectRowProp}
        deleteRow={true}
        multiColumnSearch={true}
        search={true}
        ignoreSinglePage={true}
        options={tableOptions}
        >
        <TableHeaderColumn dataField="_id" isKey={true} dataAlign="center" 
          searchable={false}>ID</TableHeaderColumn>
        <TableHeaderColumn dataField="serialnumber" dataAlign="center"
           searchable={false}>Serial Number</TableHeaderColumn>
        <TableHeaderColumn dataField="model" dataAlign="center" 
          dataSort={true}>Model</TableHeaderColumn>
        <TableHeaderColumn dataField="os" dataAlign="center" dataSort={true} 
          dataFormat={osName} filterValue={osName}>OS</TableHeaderColumn>
        <TableHeaderColumn dataField="battery" dataAlign="center" dataSort={true} 
          dataFormat={batteryCondition} filterValue={batteryCondition}>
          Battery Condition</TableHeaderColumn>
    </BootstrapTable>
    )
}

SystemTable.contextTypes = {
    router: React.PropTypes.object
}

export default SystemTable;

我希望能够做的是调用这样的函数:

displaySystemInfo(row, event) {
    event.preventDefault();
    const systemId = row._id;
    this.context.router.transitionTo(`/system/${systemId}`)
}

 onRowClick: function(row) {

 }

我一直试图这样做:

onRowClick: function(row) {
    (e) => this.displaySystemInfo(row, e);
}

但它不起作用,我很抱歉,如果它是一个简单的修复,但我只是不知道如何处理onRowClick属性中的事件。感谢任何帮助,谢谢!

修改

忘记提及我的意思“它不起作用”,我收到以下警告:

warning Expected an assignment or function call and instead saw an expression no-unused-expressions

点击时没有任何内容。

2 个答案:

答案 0 :(得分:0)

你试过了吗?

onRowClick: function(row) {
    retrun displaySystemInfo(row, e);
} 

答案 1 :(得分:0)

为什么需要e.preventDefault?它应该只是

/**
 * @REST\GET("/clients/{client}", name="get_client")
 */
public function getClientAction(Request $request, Client $client)
{
    return $this->view($client, 200);
}

onRowClick: this.displaySystemInfo

onRowClick会自动传递行数据,但TableRow源代码中的单击处理程序并不提供直接抓取和操作点击事件信息的钩子。