2016-05-03 7 views
1

Ich habe den folgenden Code:Pass-Funktion in Requisiten Griddle benutzerdefinierte Komponente - ReactJS

var RiderComponent = React.createClass({ 
    updater: function(){ 
     this.props.metadata.update(); 
    }, 

    render: function() { 
     return (
      <a href="#" onClick={this.updater}> 
       click! 
      </a> 
     ); 
    } 
}); 

var RiderList = React.createClass({ 
    columnMeta: [ 
     { 
      "columnName": "action", 
      "displayName": "", 
      "cssClassName": "buy", 
      "order": 6, 
      "customComponent": RiderComponent, 
      "update": this.update 
     } 
    ], 

    update: function() { 
     this.props.update(); 
    }, 

    render: function() { 
     return <Griddle results={this.props.data} 
         useGriddleStyles={false} 
         showFilter={true} 
         columnMetadata={this.columnMeta} 
         columns={['action']} 
         resultsPerPage={18} 
         initialSort={'value'} 
         initialSortAscending={false} 
         noDataMessage={'Geen wielrenners gevonden.'} 
     /> 
    } 
}); 

Ich möchte die update() Funktion von RiderList in meinem RiderComponent laufen, wenn ich auf einen Eintrag klicken. Allerdings bekomme ich immer: 'Uncaught TypeError: this.props.metadata.update ist keine Funktion'.

Wie kann ich die Update-Funktion in meiner RiderComponent korrekt ausführen?

RiderList wird in Teammanager gemacht:

var TeamManager = React.createClass({ 
    getInitialState: function() { 
     return { 
      results: [], 
      activeRiders: [], 
      extraRiders: [], 
      availablePositions: [] 
     } 
    }, 

    componentWillMount: function() { 
     this.getExternalData(); 
    }, 

    getExternalData: function() { 
     var race_id = 1; // TODO: this is hardcoded 
     request = Api.getRidersPageUrl(race_id); 

     $.get(request, function (rsp) { 
      var data = rsp; 
      var activeRiders = []; // Riders with position 0..8 
      var extraRiders = []; // Riders with position 9..14 
      var availablePositions = Array.apply(null, {length: 9}).map(Number.call, Number); // Array 0..8; 

      if (data) { 
// set data to arrays here 
      } 

      this.setState({ 
       results: data, 
       activeRiders: activeRiders, 
       extraRiders: extraRiders, 
       availablePositions: availablePositions 
      }); 
     }.bind(this)); 
    }, 

    render: function() { 
     return (
      <RiderList update={this.getExternalData} data={this.state.results}/> 
     ) 
    } 
}); 

module.exports = TeamManager; 

Hier this.getExternalData lädt nur die Daten in this.state.results.

EDIT: Ich habe etwas in OnRowClick = {this.update} in RiderList Rendern arbeiten. Dies wird jedoch ausgelöst, wenn ich auf die Zeile und nicht auf eine bestimmte Schaltfläche in der Zeile klicke.

+0

wir wissen nicht einmal, wenn Sie die Requisiten richtig sind vorbei, können Sie die vollständige Komponente posten? – QoP

+0

die Requisiten sind richtig übergeben, wenn ich "update": "Dies ist ein Test" und console.log (this.props.metadata.update) es prins das ist ein Test. Dieses update gibt mir jedoch 'undefined'. Ich habe den Hauptpost ein bisschen bearbeitet. – Terry

Antwort

-1

aktualisiert Antwort basierend auf Frage neue Info,

var RiderComponent = React.createClass({ 
    render: function() { 
     return (
      <a onClick={this.props.metadata.update}> 
       click! 
      </a> 
     ); 
    } 
}); 

var RiderList = React.createClass({ 
    getColumnMeta: function(){ 
     return[ 
      { 
       "columnName": "action", 
       "displayName": "", 
       "cssClassName": "buy", 
       "order": 6, 
       "customComponent": RiderComponent, 
       "update": this.update 
      } 
     ] 
    }, 

update: function() { 
    this.props.update(); 
}, 

render: function() { 
    return <Griddle results={this.props.data} 
        useGriddleStyles={false} 
        showFilter={true} 
        columnMetadata={this.getColumnMeta()} 
        columns={['action']} 
        resultsPerPage={18} 
        initialSort={'value'} 
        initialSortAscending={false} 
        noDataMessage={'Geen wielrenners gevonden.'} 
    /> 
} 
}); 
+0

Ich habe die Updater-Funktion hinzugefügt, aber beim Laden der Seite bekomme ich: Uncaught TypeError: this.updater.bind ist keine Funktion – Terry

+0

Ich denke, es gibt einen Tippfehler onClick anstelle von onclick –

+0

Ich versuchte beide, aber scheint keinen Unterschied zu machen , habe den gleichen Fehler – Terry

Verwandte Themen