2015-06-07 11 views
8

Sto provando a creare un elenco di contatti di tipo POC per NativeScript. E mi piacerebbe avere un'immagine e un nome in una voce di elenco. Il codice che sto usando per il layout è la seguenteListView.itemTemplate e immagini in NativeScript

<Page loaded="pageLoaded"> 
    <ListView items="{{ myItems }}"> 
     <ListView.itemTemplate> 
      <Image src="{{ imageSrc }}" /> 
      <Label text="{{ title }}" /> 
     </ListView.itemTemplate> 
    </ListView> 
</Page> 

A quanto pare, il valore del titolo è in arrivo bene, ma l'immagine non viene visualizzata a tutti. Quando provo a inserire lo stesso codice immagine in una pagina vuota, NativeScript crea la pagina con l'immagine.

Qualcuno può dirmi perché l'immagine non viene visualizzata nel modello listview? E come può essere visualizzato?

Grazie

+0

è la struttura di dati osservabili (myItems) un array di oggetti con il oggetto essendo {imageSrc: "blah.png", titolo: "blah blah blah blah"} – Nathanael

+0

è un'immagine locale o remota (http)? – antoine129

+0

sì @Nathanael, è una matrice di quell'oggetto. – Shhhhh

risposta

15

Ho provato questo; Devi mettere gli oggetti interni in un layout. Credo che l'itemTemplate possa essere UN SOLO figlio. Tutti i miei test sembrano indicare che itemTemplate punta a un singolo figlio.

Quindi questo funziona correttamente poiché il figlio singolo è uno StackLayout che contiene quindi i due elementi.

XML:

<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="onPageLoaded"> 
     <ListView id="listview" items="{{ myItems }}"> 
      <ListView.itemTemplate> 
       <StackLayout orientation="horizontal"> 
       <Label text="{{ title }}" /> 
       <Image src="{{ src }}" stretch="none" /> 
       </StackLayout> 
      </ListView.itemTemplate> 
     </ListView> 
</Page> 

Per il completamento del codice (per tutti coloro che guardando questo in futuro) le JS più semplici:

var observableArray = require("data/observable-array"); 
function onPageLoaded(args) { 
    var page = args.object; 
    var array = new observableArray.ObservableArray(); 

    array.push({title: "Title1", src: 'http://master-technology.com/images/Logo1.gif')}); 
    array.push({title: "Title2", src: 'http://master-technology.com/images/demos/Apps-TurnItOffLogo.gif')}); 

    page.bindingContext = {myItems: array}; 
} 
exports.onPageLoaded = onPageLoaded; 
+0

Le tue soluzioni hanno funzionato perfettamente. Grazie!! Non riesco ancora a capire il requisito di ObservableArray() qui. – Shhhhh

+1

L'unico scopo per ObservableArray è che è possibile apportare modifiche in tempo reale e fare aggiornamenti. Si consiglia di eseguire qualsiasi legame che si utilizza Osservabile in modo che possa essere modificato in due modi. Ma puoi semplicemente usare un array semplice se vuoi se l'elenco non verrà aggiornato frequentemente. – Nathanael

+0

Capisco. Ciò ha senso. – Shhhhh