2016-07-29 13 views
1

Ich benutze nativescript, um eine grundlegende App zu erstellen, aber ich bin fest, den Kontext zwischen den Seiten zu senden.
Ich listet eine Reihe von Elementen in page1 auf, die ich von einer http-Anfrage bekomme, und was ich erreichen möchte, ist die ID des Elements in den Kontext zu senden, um eine http-Anfrage zu machen und die Antwort in page2 zu rendern.
Hier ist mein Ansatz:Senden dynamischer Werte im Kontext in nativescript

page1.xml (diese Seite in eine tabviewitem injiziert wird)

<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

Die Sache ist: wenn ich auf ein Element klicke, navigiere die App zu Seite2, aber zeige nicht den Namen, der innerhalb des Kontexts gesendet wurde, und wenn ich es mit Info versuche, funktioniert es.
Ich kann nicht herausfinden, wie es funktioniert.
Vielen Dank im Voraus

Antwort

0

Ich denke, das ist, weil Sie die name von args.object.name nicht bekommen haben. Haben Sie versucht, die ID und den Namen zu trösten? Der Grund, warum es die Info zeigt, ist, dass Sie die Info im Kontext auf eine Zeichenfolge setzen, während der Name nichts ist.

Ich denke auch, es ist etwas falsch hier in Ihr Code:

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

Listview nicht über solche Eigenschaften „motelId“ oder „Name“, und diese sind auch im Inneren des ListView.itemTemplate wie ich sein sollte verstehen.

Noch eine Sache, fügen Sie die "itemTap" innerhalb der ListView-Tags. Es bedeutet, dass das Objekt, das Sie von der args.object erhalten, die Instanz von ListView sein wird, die keine solche Eigenschaft wie name hat, also haben Sie den Namen nicht an page2 gesendet

+0

Wenn ich console.log den Namen und die ID Ich bekomme [object object], aber wenn ich die Funktion auf eine label verschiebe und den Namen und die ID als label -Eigenschaft lege, bekomme ich die richtigen Werte –