2011-07-04 5 views
2

私のEnyoアプリでは、があり、さまざまなテキスト表示とIntegerPickerを含むControlが生成されています。IntegerPickerを含むFlyweight VirtualRepeater

私はこのリピータを有する2つの問題を抱えて:三列が生成される場合、行1および2にIntegerPickerをクリックすると、行0におけるIntegerPickerの上にドロップダウンピッカーUIをもたらす

1)

2)setMax()を使用して、最大値で各IntegerPickerを初期化します。しかし、3つの行が生成された場合、0行目と1行目のIntegerPickersは2行目と同じ最大値を持ちます。

IntegerPickerが作成されており、最初の行で使用されているように見えます。

私はVirtualRepeaterRepeaterに置き換えようとしましたが、真を返す代わりにIntegerPickerを含むアイテムの新しいインスタンスを返すようにリピータの行作成関数を変更しました。ただし、これによりエラーが発生します:

警告:enyo.Component.addComponent():重複したコンポーネント名 "itemName"がハッシュの既存のコンポーネントを置き換えて継続するが、これはエラーです固定しなければならない。

Repeaterでは、インラインで作成された代理人が必要になると思われますが、これはかなり控えめです。

このコードサンプルは、問題を示しています

enyo.kind({ 
    name:"Test", 
    kind:enyo.Control, 
    components: [ 
     { 
     kind: "VirtualRepeater", 
     onSetupRow: "setupRow", 
     components: [{ 
       name: "theIP", kind: "IntegerPicker", min:0 
     }] 
     } 
    ], 

    setupRow: function(inSender, inIndex) { 
     if (inIndex < 3) { 
     this.$.theIP.setMax(inIndex); 
     return true; 
     } 
     return false; 
    } 
}); 

どのように私は私のアプリでIntegerPickerの任意の数を作成することができますか?どんな助けにも感謝!

答えて

0

setupRow関数でIPを使って何をしているのかは、Virtual Repeaterの子コンポーネントである特定のIntegerPicker自体にアクセスしています。行に対応する与えられたIntegerPickerの最大値を設定するには、「PickerList」のように、自分のVirtualRepeater name属性を与える:

kind: "VirtualRepeater", 
onSetupRow: "setupRow", 
name: "PickerList", 
components:[//this should be empty to begin with] 

は、その後、あなたがこのようにリピータの各行にアクセスすることができます。

setupRow: function(inSender, pickerMax) { 

    var newPicker = new IntegerPicker(pickerMax); 
    this.$.PickerList.push(newPicker); 
あなたはこのようにそれを行うために必要VirtualRepeater内の特定の行を取得するには

this.$.PickerList[1]; 

ここではVirtualRepeaterを利用した拡張Enyoのチュートリアルです: https://developer.palm.com/content/resources/develop/extended_enyo_tutorial.html

関連する問題