2016-07-29 1 views
1

Я использую nativescript для создания базового приложения, но я застрял в отправке контекста между страницами.
Я перечисляю ряд статей в page1, которые я получаю от http-запроса, и то, что я хочу достичь, отправляет идентификатор элемента в контекст, чтобы сделать http-запрос и отобразить ответ на странице2.
Вот мой подход:Отправка динамических значений внутри контекста в nativescript

page1.xml (эта страница впрыскивается в tabviewitem)

<StackLayout class="tab-content" loaded="onViewLoaded"> 
    <GridLayout rows="auto, *"> 
     <ListView items="{{ motels }}" 
        row="1" 
        id="motelsList" 
        motelId="{{ id }}" 
        name="{{ name }}" 
        itemTap="goToMotelDetail"> 
      <ListView.itemTemplate> 
       <GridLayout columns="auto, *"> 
        <GridLayout columns="auto" rows="auto" class="icon-wrap"> 
         <Image width="70" height="70" src="http://fpoimg.com/70x70" stretch="fill" css="icon-image" /> 
        </GridLayout> 
        <StackLayout col="1" verticalAlignment="center"> 
         <Label text="{{ name }}" textWrap="true" class="motel-name" /> 
         <Label text="{{ address }}" textWrap="true" class="motel-address" /> 
        </StackLayout>     
       </GridLayout> 
      </ListView.itemTemplate> 
     </ListView> 
     <ActivityIndicator busy="{{ isLoading }}" row="1" horizontalAlignment="center" /> 
    </GridLayout> 
</StackLayout> 

page1.js

exports.goToMotelDetail = function(args) { 
    var id = args.object.motelId; 
    var name = args.object.name; 
    var navigationEntry = { 
     moduleName: "views/motel-detail/motel-detail", 
     context: { 
      info: "some string to test", 
      id: id, 
      name: name 
     }, 
     animated: false 
    }; 
    var topmost = frameModule.topmost(); 
    topmost.navigate(navigationEntry); 
} 

page2.xml

<Page navigatedTo="navigatedTo"> 
    <Page.ActionBar> 
     <ActionBar title="{{ name }}" /> 
    </Page.ActionBar> 
    <Label text="Motel detail" /> 
</Page> 

page2.js

exports.navigatedTo = function (args) { 
    var page = args.object; 
    var dataItem = page.navigationContext; 
    page.bindingContext = dataItem; 
}; 

Дело в том, что когда я нажимаю на элемент, приложение переходит на страницу2, но не отображает имя, которое было отправлено в контексте, и если я пытаюсь с информацией, оно работает.
Я не могу понять, как заставить его работать.
Заранее спасибо

ответ

0

Я думаю, что это потому, что вы не получили name от args.object.name. Вы пытались console.log идентификатор и имя? Причина, по которой она показывает информацию, заключается в том, что, поскольку вы устанавливаете информацию в контексте в строку, в то время как имя может быть ничем.

Я также думаю, что есть что-то здесь не так в вашем коде:

<ListView items="{{ motels }}" 
       row="1" 
       id="motelsList" 
       motelId="{{ id }}" 
       name="{{ name }}" 
       itemTap="goToMotelDetail"> 

ListView не имеет таких свойств «motelId» или «имя», и они также должны быть внутри ListView.itemTemplate как я Понимаю.

Еще одна вещь: вы помещаете «itemTap» в теги ListView. Это означает, что объект, который вы получаете от args.object, будет экземпляром ListView, который не имеет такого свойства, как name, поэтому у вас нет имени, отправленного на страницу2

+0

Когда я console.log имя и идентификатор Я получаю объект [object object], но если я переместил функцию на метку и поместил имя и id в качестве свойства метки, я получу правильные значения –

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