2016-04-04 8 views
0

NativeScript <ListView>を使用していますが、各要素の個々の要素にアクセスしようとしています<ListView.itemTemplate>。具体的な例を示すために、このコードスニペットを参考に、それぞれ<GridLayout>にアクセスするにはどうすればよいですか?私は、各<GridLayout> -i.e.へloadedイベントを追加することができます知っているNativeScriptのListViewにアクセスするitemTemplateの内容

<ListView> 
    <ListView.itemTemplate> 
    <GridLayout>...</GridLayout> 
    </ListView.itemTemplate> 
</ListView> 

<GridLayout loaded="myEventHandler"> - 私の使用例では、関連のないイベントが発生した後に<GridLayout>の属性を変更する必要があります。

loadedイベントを使用して、<ListView.itemTemplate>にある<GridLayout>のすべての配列を作成し、その配列を使用してアクションを実行することはできますが、それはちょっとハッキリです。それは良い方法がなければならないようです。何か案は?

+0

私はNathanaelの優れたnativescript-domプラグイン(https://github.com/nathanaela/nativescript-dom)を試したことに注意してください。しかし、そのアプローチでも、テンプレートの内容はまったくアクセス可能ではないようです。 –

答えて

1

nativescript-domプラグインを使用できます。 getElementsByClassNameには、実際にはListViewの子をトラバースするコードがあります。残念ながら問題を発見してNS Common Componentsリポジトリにバグレポートを入れた後、nativescript-domプラグインのgetElementsByTagName関数とgetElementById関数に同じ変更を加えるのは忘れました。

getElementsByClassNameを使用すると、クラス名を割り当てるとすぐに動作します。さもないと;おそらく、今週末にライブラリのアップデートを行い、他の2つのメソッドのためにリストビューの子トラバーサルコードを持っていきます。

更新:私は、3つのgetElement *すべてがListViewの子に作用することを可能にするnativescript-domの新しいバージョンをリリースしました。

0

id = "gridView {{$ index}}"のようなものを使って各gridviewとidを動的に与えることができると思います。例えば、page.getViewById( 'gridView1')を使用します。現時点ではテストできませんが、うまくいくと思います。

+0

これは巧妙な考えですが、残念ながらうまくいかないようです。 'getElementById'を試してみると、テンプレート内の要素を見つけることができません。ビジュアルツリーにはまったくないようです。 –

3

リストビューアイテムのビジュアルツリーを操作することは、ここで最も堅牢なアプローチのようには見えません。次のシナリオを検討してください。

  1. アイテムが画面に表示されます。
  2. コードは、ビジュアルコンテナのツリーをキックして変更します。
  3. ユーザーがスクロールしたり、何かが発生したりすると、リストビューはビジュアルコンテナを別のアイテムに再利用します。あなたの新しいアイテムは今や壊れています。

私はバインディングを使用して実装しています。ヘアメイクがある場合は、バインディングを簡単にする適切なビューモデルを実装します。

関連する問題