2017-04-23 12 views
0

私はオブジェクト配列でListPickerを使用しようとしています。リストはすべての要素に対して[object Object]というラベルで表示されます。Nativescript JSオブジェクトでLIstPickerを使用する

私はlistpickerの "ラベル"として使用するプロパティを指定したいと思います。

残念ながらNativescript ListPickerのみ文字列の配列を受け取り、ラベルのtoString(呼び出すように私は私のオブジェクトの配列を使用することはできません)

私は、に基づいて、代替解決策を見つけた:https://github.com/NativeScript/NativeScript/issues/1677

私のアプリを購入私は上記の提案されたアプローチを使用する方法がないので、ページルータ出口を使用し、要素を使用しません。このシナリオを考えれば、オブジェクト配列でListPickerを使用する方法や、Page要素の読み込みイベントに依存しない回避策はありますか?

答えて

3

ロードされたイベントをまったく使用する必要はありません。単にtoStringメソッドをオーバーライドし、ListPickerにアイテムを渡す:ピッカーへ

public countries: any[] = [ 
    { 
     value: 0, 
     name: 'Sweden', 
     toString:() => { 
     return 'Sweden'; 
     } 
    }, 
    { 
     value: 1, 
     name: 'Denmark', 
     toString:() => { 
     return 'Denmark'; 
     } 
    }, 
    { 
     value: 2, 
     name: 'Norway', 
     toString:() => { 
     return 'Norway'; 
     } 
    }, 
    { 
     value: 3, 
     name: 'Finland', 
     toString:() => { 
     return 'Finland'; 
     } 
    }, 
    { 
     value: 4, 
     name: 'Iceland', 
     toString:() => { 
     return 'Iceland'; 
     } 
    }, 
    ]; 

パス全角:

<ListPicker [items]="countries"></ListPicker> 
+0

は私が押されたときには、動的に、すべての国のオブジェクトのtoStringメソッドを変更することを、ボタンを持っていると言います。 ListPickerは、リストピッカーをスクロールするまで、変更されたtoStringメソッドを取得していません。変更された検出をオブジェクトで動作させるために特別なことがありますか? – apricity

+1

@apricity参照をspread演算子 'this.myData = [... myData]'で更新するか、 'changeDetectorRef.markForCheck()'を使う必要があります。例がないと伝えにくい。 – Chrillewoodz

+0

markForCheck()はうまくいきました:私は混乱し、以前はdetectChanges()を使用していました。これは、https://stackoverflow.com/questions/41364386/whats-the-difference-between-markforcheck-and-detectchangesの助けとなりました – apricity

関連する問題