2016-09-27 2 views
0

Я установил событие onClick в ListItem. Затем вызывается .bind по методу, вызываемому для передачи значений идентификатора и имени элемента clicked list.Как передать параметры в привязке события onClick?

Следующий SO question предложил использовать bind, но кажется, что событие onCLick в ListItem прерывает переплет списка.

Перед тем как добавить событие click, привязка списка к asset.name работает так, как ожидалось, и этот список заполняется.

Также, если я попробую onClick={this._onAssetSelected() без параметров, событие клика не работает.

Вопрос:

Как вы можете передать параметры в затруднительное событие OnClick в JSX?

Определение списка:

   <List selectable={true} selected={0}> 
       { 

        this.state.data.map(function (asset) { 
         return (
          <ListItem justify="between" onClick={this._onAssetSelected.bind(this, asset.name, asset.id)} > 
           <span>{asset.name}</span> 
          </ListItem> 
         ); 
        }) 

       } 
       </List> 

метод вызывается из события щелчка:

_onAssetSelected(assetName, assetID) { 

    console.log(assetName); 
    console.log(assetID);  


    } 

ответ

2

Вы можете сделать это. Определите функцию anonymous как обратный вызов, внутри которого вы вызываете свой метод с параметрами. Hop ut помогает!

<List 
    selectable={true} 
    selected={0}> 
    { 

    this.state.data.map(function (asset) { 
     return (
      <ListItem 
       justify="between" 
       onClick={(e) => this._onAssetSelected(asset.name, asset.id, e)} > 
       <span>{asset.name}</span> 
      </ListItem> 
     ); 
    }) 

    } 
</List> 
+0

Использование типичных замыканий - путь. Я бы также передал полный объект активов, а не конкретные свойства. – gor181

+0

Итак, я определил анонимную функцию, как указано выше. Консоль в dev-инструментах говорит мне: «Uncaught TypeError: Can not read property» _onAssetSelected «undefined». Я вижу, что этот метод определен в классе. Или я пропустил что-то еще здесь? –

+0

Вы должны добавить 'var _this = this' перед обработкой' return' и использовать '_this._onAssetSelected' внутри карты. –