2

在我的 Enyo 应用程序中,我有一个VirtualRepeater生成Control包含各种文本显示的 s 和一个IntegerPicker.

这个中继器有两个问题:

1) 如果生成了三行,单击第1 行和第 2 行会在第 0 行IntegerPicker的顶部弹出下拉选择器 UI 。IntegerPicker

IntegerPicker2)我使用最大值初始化每个setMax()。但是,如果生成三行,则第IntegerPickers0 行和第 1 行中的最大值将与第 2 行中的最大值相同。

看起来好像只有一个IntegerPicker正在创建并在第一行使用。

我尝试将 my 替换VirtualRepeaterRepeater,并更改了我的转发器行创建函数以返回包含 的项目的新实例IntegerPicker,而不是返回 true。但是,这会产生错误:

警告:enyo.Component.addComponent(): Duplicate component name "itemName" 违反 unique-name-under-owner 规则,替换散列中的现有组件并继续,但这是一个错误情况,应该修复。

似乎Repeaters 需要内联创建他们的代表,这似乎很不雅。

此代码示例说明了问题:

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在我的应用程序中创建任意数量的 s?任何帮助表示赞赏!

4

1 回答 1

0

您在 setupRow 函数中使用 theIP 所做的是访问特定的 IntegerPicker 本身,它是虚拟中继器的子组件。要设置与行对应的给定 IntegerPicker 的最大值,请为您的 VirtualRepeater 指定名称属性,例如“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];

这是一个使用 VirtualRepeater 的扩展 Enyo 教程: https ://developer.palm.com/content/resources/develop/extended_enyo_tutorial.html

于 2012-06-04T22:05:28.797 回答