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

Posted

技术标签:

【中文标题】如何处理对象属性内的事件函数?【英文标题】:How to handle event function inside object attribute? 【发布时间】:2017-03-18 11:31:37 【问题描述】:

您好,我正在将 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

点击后什么也没有发生。

【问题讨论】:

【参考方案1】:

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

onRowClick: this.displaySystemInfo

onRowClick: function(row) 
    const systemId = row._id;
    this.context.router.transitionTo(`/system/$systemId`)

onRowClick 自动传递行数据,但 TableRow 源中的单击处理程序没有提供直接获取和操作单击事件信息的挂钩。

【讨论】:

每当我尝试这个:onRowClick: displaySystemInfo,我得到:error 'displaySystemInfo' is not defined。我将使用整个文件编辑帖子。 哦,我明白了。我以为您将 displaySystemInfo 声明为 const 内部渲染。在这样的类声明中,将其称为 this.displaySystemInfo 你说得对,不需要事件变量,但我必须使用 ES6 箭头函数:onRowClick: row =&gt; const systemId = row._id; this.context.router.transitionTo(/system/$systemId); 【参考方案2】:

你试过了吗:

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

【讨论】:

我收到以下错误:error 'e' is not defined no-undef 这是我不知道如何或在哪里做的,定义事件。

以上是关于如何处理对象属性内的事件函数?的主要内容,如果未能解决你的问题,请参考以下文章

WPF 如何处理对空对象属性的绑定?

如何处理 TypeScript 中内置对象的专有/自定义属性的警告

如何处理 ViewPager Tab 内的不同事件?

如何处理试图在laravel中获取非对象错误的属性?

如何处理 API 有时将属性作为数组返回,有时作为对象返回?

当我为此目的创建构造函数时,如何处理 Doctrine::find 未初始化未映射的实体属性?