2011-07-04 56 views
2

在我的Enyo應用程序中,我有一個VirtualRepeater,它產生了包含各種文本顯示和IntegerPickerControl包含IntegerPicker的Flyweight VirtualRepeater

我有兩個問題轉發:

1)如果三排生產,單擊行1 IntegerPicker和2 0行帶來了超過IntegerPicker頂部的下拉選擇器UI

2)我使用setMax()以最大值初始化每個IntegerPicker。然而,如果三行的生產,在行0的IntegerPickers和1將在第2行

相同最大值爲看起來好像正在創建僅一個IntegerPicker和第一行上正在被使用。

我嘗試用Repeater替換我的VirtualRepeater,並更改了我的中繼行創建函數以返回包含IntegerPicker的項目的新實例,而不是返回true。但是,這會產生錯誤:

warning:enyo.Component.addComponent():重複的組件名稱「itemName」違反了unique-name-under-owner規則,替換散列中的現有組件並繼續,但這是一個錯誤條件,應該修復。

看起來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時正在訪問特定的IntegerPicker本身,它是虛擬中繼器的子組件。設置給定IntegerPicker對應於該行的最大值,給你VirtualRepeater name屬性,如「PickerList」:

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]; 

這裏是一個擴展的Enyo教程,利用了VirtualRepeater的: https://developer.palm.com/content/resources/develop/extended_enyo_tutorial.html