2016-11-14 3 views
0

Diese Frage wurde oft beantwortet, aber ich habe sie alle ohne Erfolg versucht. Ich habe versucht, die Funktion bindend, aber es gibt mir immer noch diese Fehlermeldung:dies. <name> ist keine Funktion

_this3.toggleDrawer is not a function

Code:

class DrawerContent extends Component { 
    toggleDrawer() { 
    this.context.drawer.toggle() 
    } 
    _renderHeader(section) { 
    if (section.content.length === 0) { 
     var sectionID = section.title.match(/\d/g).join("") 
     return(
     <View> 
      <TouchableOpacity onPress={() => { 
      NavigationActions.movie_grid({dataID: sectionID}) 
      this.toggleDrawer() 
      }}> 
      <Text style={{color: "#000", padding: 15}}>{section.title.replace(/[0-9]|,/g, '')}</Text> 
      </TouchableOpacity> 
     </View> 
     ) 
    } else { 
     return(
     <View> 
      <Text style={{color: "#000", padding: 15}}>{section.title.replace(/[0-9]|,/g, '')}</Text> 
     </View> 
    ) 
    } 
    } 
} 
+0

Sie müssen 'this' explizit binden, während Sie Ihre Funktion so aufrufen:' this.toggleDrawer(). Bind (this) '. –

+0

@BasimHennawi Ich habe versucht, dass – Raymond

Antwort

1

Sie haben nicht alle Ihre Code hier enthalten, aber meine Vermutung ist, Sie sind nicht verbindlich _renderHeader(). Ich nehme an, dies ist in einem ListView verwendet wird, so sollte es in etwa so aussehen:

<ListView 
    renderHeader={this._renderHeader.bind(this)} 
    ... /> 

Die this innerhalb _renderHeader bindet, die dann weiter this richtig in Ihren anderen Funktionen binden können.

+0

Ich kann leider nicht den gesamten Quellcode anzeigen, aber die renderHeader-Funktion ist für ein Akkordeon nicht die ListView – Raymond

+0

@ Raymond glaube ich meine Antwort sollte immer noch relevant sein, Sie haben '_renderHeader' nicht gebunden, wo immer Sie es verwenden. Kannst du das überprüfen? –

+0

Es hat funktioniert. Vielen Dank. Aber sollte "this" nicht gebunden sein, da ich die Akkordeon-Klasse bereits in einer Listview habe? – Raymond

0

Rückrufe Reagieren Sie auf Elemente benötigen für this gebunden zu sein, zu arbeiten.

Versuchen Sie, die folgende Funktion, um Ihre Klasse hinzufügen:

onOpacityClick() { 
    NavigationActions.movie_grid({dataID: sectionID}); 
    this.toggleDrawer(); 
} 

Versuchen Sie, Ihre erste Rückkehr in diese ersetzen:

return(
    <View> 
     <TouchableOpacity onPress={this.onOpacityClick.bind(this)}> 
     <Text style={{color: "#000", padding: 15}}>{section.title.replace(/[0-9]|,/g, '')}</Text> 
     </TouchableOpacity> 
    </View> 
    ) 
+0

es Ergebnisse mit 'kann Eigenschaft 'bind' von undefined nicht lesen – Raymond