2015-09-02 3 views
0

Я создаю приложение iOS с реагированием-native, и теперь я застреваю, пытаясь загрузить другой вид моего приложения, я собираюсь объяснить это более глубоко.NavigatorIOS между файлами

я получил представление индекса с ListView, чтобы загрузить список элементов, у меня есть код пункта будут перечислены в другом файле, так что я необходим файл, на мой взгляд индекс:

var Story = require('./story'); 

Тогда у меня есть функция визуализации:

renderStory: function(story) { 
    return (
    < Story story={ story } /> 
); 
}, 

И мой ListView компонент:

<ListView 
    dataSource={this.state.dataSource} 
    renderRow={this.renderStory} 
    style={ styles.content } /> 

Еву rything работает хорошо до сих пор. Но теперь я хочу сделать это каждый раз, когда вы нажимаете на часть моего «Story», перейдите в другое представление через NavigatorIOS (насколько я знаю, это единственное представление для навигации между представлениями), поэтому я пытался для этого, но я нахожу проблему, что у меня есть мой индекс и мои представления элементов в отдельных файлах, поэтому я всегда получаю ошибки.

Буду очень признателен, если кто-то может помочь мне с этим.

Заранее спасибо.

EDIT

Вот код, который у меня есть в моем файле пункт «История»:

var Story = React.createClass({ 
    gotoIndividualStory: function(){ 
    console.log(this.props); 
    // this.props.navigator.push({ 
    // title: 'Individual Story', 
    // component: Individual, 
    // }); 
    }, 

    render: function() { 
    var story = this.props.story; 

    return (
     <View style={ styles.story }> 
     <NavigatorIOS 
      initialRoute={{ 
      component: Individual, 
      title: 'List', 
      }} /> 

     <View style={ styles.storyHeader }> 
      <TouchableHighlight onPress={() => this.gotoIndividualStory() }> 
      <Image style={ styles.storyImage } source={ { uri: story.image_thumb_url } } /> 
      </TouchableHighlight> 
     </View> 

ответ

0

Есть несколько различных подходов можно сделать здесь.

1) Простой, но немного уступающий по архитектуре: пусть ваш класс Story возьмет свойство, которое является функцией (React.PropTypes.func) - например, укажите свойство «onTap». Это будет ваш обратный вызов. Затем в renderStory добавьте обратный вызов. это сделает ваш renderRow выглядеть как

renderRow={(rowData) => this.renderStory(rowData, this.onTap)} 

и ваш renderStory будет выглядеть как:

renderStory: function(story, onTap) { 
    return (<Story story={story} onTap={onTap}); 
} 

и когда вы на самом деле нажмите в истории сделать обратный вызов:

onTap(story) 

2) Лучшей архитектурой будет использование архитектуры Flux (например) (https://facebook.github.io/flux/docs/overview.html) - вы отправляете клик на Dispatcher в качестве mehod, он информирует местные магазины, и они выдает события, которые обрабатывается навигационным видом.

+0

Большое вам спасибо за помощь Ярек. Я установил новую переменную в части renderRow, также в функции renderStory, но я не уверен, где мне нужно использовать код onTap (story). В файле, где есть элемент истории, у меня есть эта часть, где я хочу управлять краном (я отредактировал свой вопрос с дополнительной информацией) –

+0

Это совсем другое, что у вас есть сейчас. Вы должны определить представление NavigatorIOS в рендере основного класса, определенном в другом месте, и только оттуда ссылаться на Story как на часть другого представления (вы не можете отображать в рендеринг Story - Story должен только отображать себя.Основной рендеринг класса приложения должен отображать , а затем внутри Navigator IOS - через initialRoute или, может быть, позже путем нажатия других маршрутов - должен ссылаться на (возможно, косвенно - через некоторый вид списка или ScrollView). –

+0

Извините, если я раньше не объяснял. На самом деле, я тестировал NavigatorIOS в обоих файлах, и, как я объяснил в своем вопросе, я всегда получаю ошибки независимо от того, в каком файле я работаю. Если я определяю NavigatorIOS в своем основном классе, тогда, когда я пытаюсь обработать событие onPress в своем рассказе, я получаю ошибки. Я не знаю, как это можно решить:/ Спасибо. –

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