2015-12-11 2 views
0

Я пытаюсь создать список, полный кнопок, и если вы нажмете кнопку, он отправит информацию, которая была на этой кнопке, на следующую страницу. Мне удалось получить правильное представление списка, а кнопки могут перейти на следующую страницу, но мне не удаётся решить, как использовать rowID для определения того, какая кнопка была нажата. У меня есть следующий код, но по какой-то причине rowID дает ошибку undefined, это не объект, когда он щелкнут, когда я изменяю rowID с номером (скажем 1), он отлично работает, любые идеи?React Native rowID, дающий ошибку undefined, не является объектом

спасибо

var woolworths = { 
    'title': "Woolworths", 
    "description":'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."', 
    'img': require('../assets/woolworths.jpg') 
}; 

var checkers = { 
    'title': "Checkers", 
    "description":'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."', 
    'img': require('../assets/checkers.jpeg') 
}; 

var picknpay = { 
    'title': "Pick 'n Pay", 
    "description":'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."', 
    'img': require('../assets/picknpay.jpg') 
}; 

var partners = [woolworths, checkers, picknpay]; 

class Partners extends React.Component{ 
    constructor(props){ 
    super(props) 
    this._renderRow = this._renderRow.bind(this); 
    this.gotoPartner = this.gotoPartner.bind(this); 
    this.ds= new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !==  r2}) 
    this.state = { 
     dataSource: this.ds.cloneWithRows(this._partners()), 
    } 
    } 
    gotoPartner(rowID:number){ 
    this.props.navigator.push({ 
     title: partners[rowID].title, 
     component: Partner, 
     passProps: {partner:partners[0]}, 
     backButtonTitle: 'Back', 
     }); 
    }; 

    _partners(){ 
     var dataBlob = [] 
     for (var ii = 0; ii < partners.length; ii++) { 
     dataBlob.push(partners[ii].title); 
     } 
     return dataBlob; 
    } 


_renderRow(rowData, rowID){ 
    return(
    <View> 
     <TouchableHighlight 
        style={styles.button} 
        onPress={() => this.gotoPartner(rowID)} 
        underlayColor='transparent'> 
        <View style={styles.textimgholder} 
        > 
         <Text style={styles.buttonTitle}>{rowData}</Text> 
         <View style={styles.imgHolder}> 
          <Image source=   {require('../assets/arrowIcon.png')} 
           style={styles.arrowIcon}/> 
         </View> 
        </View> 
       </TouchableHighlight> 
       <Separator /> 
    </View> 
    ) 
} 
    render() { 
    return(
     <ScrollView style={styles.mainContainer}> 
     <FullSep /> 
      <ListView 
      dataSource={this.state.dataSource} 
      renderRow={this._renderRow} 
     /> 
     </ScrollView> 

    ) 
    } 
}; 

ответ

2

renderRow принимает четыре аргумента: ROWDATA, sectionID, RowId, highlightRow

renderRow(rowData, sectionID, rowID, highlightRow){ 
    return(
     <View> 
     <TouchableHighlight 
     style={styles.button} 
     onPress={() => this.gotoPartner(rowID)} 
    underlayColor='transparent'> 
      <View style={styles.textimgholder}> 
      <Text style={styles.buttonTitle}>{rowData}</Text> 
      </View> 
     </TouchableHighlight> 
    </View> 
    ) 
} 

Если вам нужно, чтобы получить RowId, вы должны сначала пройти в sectionID, то RowId.

Я создал рабочую версию, предупреждая партнеров [RowId] по щелчку: https://rnplay.org/apps/OyyXlw

+0

Большое вам спасибо, не верьте, что это была проблема, которую я так долго пытался выяснить. Извините за редактирование вопроса и ответив на другие ответы, до сих пор не видел этого ответа –

+0

Отличный, рад, что он сработал! –

0

Похоже, вы вызываете title: partners[rowID].title и, возможно, это должно быть title: this._partners[rowID].title. Все остальное выглядит хорошо для меня.

+0

Нету никогда не помогло :(Спасибо хоть –

+0

Почему вы думаете, что подчеркивание должно быть добавлено –

+0

К сожалению, я думаю, возможно, вы не опубликовали весь свой код в своем примере. Я не вижу, где определены «партнеры» без подчеркивания. Думаю, я исходил из предположения, что это был полный пример. Партнеры –

Смежные вопросы