2017-11-02 1 views
0

ich versuche, eine listview zu erstellen, um daten von hardcoded array list und seine arbeit gut zu zeigen, aber ich muss den benutzer in der lage zu klicken auf ein element, um die details dieses artikels auf einer anderen seite, wie kann ich das machen ? Ich habe versucht, ein anderes Array für Details zu erstellen und macht Binding und seine Arbeit gut, aber ich erhalte diese Fehlermeldung in der Konsole:Nativescript Binding: Eigenschaft: 'Name' ist ungültig oder existiert nicht. SourceProperty: 'name'

Binding: Property: 'name' is invalid or does not exist. SourceProperty: 'name' 

das ist mein Code:

Haupt-view-model.js:

var Observable = require("data/observable").Observable; 

function RegisterViewModel() { 
    var viewModel = new Observable(); 
    viewModel.shows = [ 
     {name:"Reg1"}, 
     {name:"Reg2"}, 
     {name:"Reg3"}, 
     {name:"Reg4"}, 
     {name:"Reg5"}, 


    ]; 

    return viewModel; 

} 

exports.RegisterViewModel = RegisterViewModel; 

Haupt page.js:

var RegisterViewModel = require("./main-view-model").RegisterViewModel; 
var frameModule = require('ui/frame'); 


var viewModel = new RegisterViewModel(); 
function RegisterViewModel(args) { 
var page = args.object; 
page.bindingContext = RegisterViewModel(); 
} 

exports.getInfo = function (args) { 
    var navigationEntry = { 
    moduleName: "RegisterDetails", 
    context: {info:args.view.bindingContext} 
     } 
     frameModule.topmost().navigate(navigationEntry); 
    } 

exports.loaded = function(args){ 
    args.object.bindingContext = viewModel; 
} 


exports.RegisterViewModel = RegisterViewModel; 

Haupt page.xml:

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo" class="page" loaded="loaded"> 

    <Page.actionBar> 
     <ActionBar title="My App" icon="" class="action-bar"> 
     </ActionBar> 
    </Page.actionBar> 

    <StackLayout class="p-20"> 

<SearchBar id="searchBar" hint="Search" text="" clear="onClear" submit="onSubmit" /> 
<TabView> 
    <TabView.items> 
    <TabViewItem title="register"> 
     <TabViewItem.view> 
      <ListView items="{{shows}}" tap="getInfo" > 

      <ListView.itemTemplate> 
       <Label text="{{name}}" /> 

      </ListView.itemTemplate> 

     </ListView> 
     </TabViewItem.view> 
    </TabViewItem> 
    <TabViewItem title="Tab 2"> 
     <TabViewItem.view> 
      <Label text="Label in Tab2" /> 
     </TabViewItem.view> 
    </TabViewItem> 
    </TabView.items> 
</TabView> 

    </StackLayout> 
</Page> 

diese für Details:

RegisterDetails-model.js

viewModel.shows = [ 
     {name:"Reg01"}, 
     {name:"Reg02"}, 
     {name:"Reg03"}, 
     {name:"Reg04"}, 
     {name:"Reg05"}, 

    ]; 
    return gotData; 

} 

exports.pageLoaded = pageLoaded; 

RegisterDetails.js:

var gotData; 
function pageLoaded(args) { 
    var page = args.object; 
    gotData = page.navigationContext.info; 
    page.bindingContext={passedData:gotData} 
    } 

    exports.pageLoaded = pageLoaded; 

RegisterDetails.xml:

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo" class="page" loaded="pageLoaded"> 

     <Page.actionBar> 
      <ActionBar title="Register" icon="" class="action-bar"> 
      </ActionBar> 
     </Page.actionBar> 

     <StackLayout > 
        <Label text="{{name}}" /> 
     </StackLayout> 
    </Page> 
aber

wenn ich klickte auf einem beliebiges Elemente i gehe Details zu registrieren, aber keine Daten zeigen in Seite und ich habe diese Nachricht erhielt Fehler in der Konsole:

JS: Binding: Property: 'name' is invalid or does not exist. SourceProperty: 'name' 

jede mögliche Hilfe?

+0

finden Wo ist die Variable 'name' in Ihrer' RegisterDetails.js' Datei referenziert? Sie referenzieren es in der Datei 'RegisterDetails.xml', scheinen es aber nicht definiert zu haben. Auch für die Dokumente sollte das Antippen-Ereignis für die ListView "itemTap" anstelle von "tap" sein. –

+0

Wie 'Name' Eigenschaft in RegisterDetails hinzufügen? Ich habe 'var gotdata' verwendet, um auf 'name' zuzugreifen, was Sie vorschlagen? –

Antwort

1

Voll funktions Demo das Problem oben und ausführliche Antwort Lösung kann here