Sencha iOS选择器bug

时间:2014-05-06 18:48:06

标签: ios extjs cordova picker

我的应用程序已接近完成,但有一个错误,我必须在发布之前对其进行排序。该应用程序使用Cordova 3.4和Sencha为iOS和Android构建“原生”应用程序(该bug仅与iOS有关)

基本上,当更改选择器值时,除非用户在单击“完成”方面的速度足够快,否则它将恢复为之前的值 - 难以解释! Here是一段视频,展示了行动中的错误。

如前所述,这只是iOS上的一个问题(Android很好)。值得注意的是,当应用程序中的其他选择器中有两个值选项时,此错误不存在。例如,时间(小时和分钟)和日期(日和月)的选择器没有此错误 - 只有单个值选择器有问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

我刚刚在我们的产品中解决了这个问题,当你只拥有一个Windows桌面时,在iPhone上调试男孩是一件非常痛苦的事!

基本上似乎正在发生的事情是,当一个插槽的选择发生变化时,内部的selectedIndex属性正在被更新,但是_value不是 - 而且它似乎是正在被咨询的_value

我创建了一个新的插槽类,如下所示,它会覆盖doItemTap以确保正确设置值(me._value = me.getValue(true);):

Ext.define('Ext.ux.FixedSlot', {  
  extend: 'Ext.picker.Slot',
  xtype : 'fixedslot',
  doItemTap: function(list, index, item, e, event) {
      var me = this;
      me.selectedIndex = index;
      me.selectedNode = item;
      me._value = me.getValue(true);
      me.scrollToItem(item, true);
  }
});

然后在我的选择器定义配置中(我们将一个类定义为field.Select的子类),我指示它使用我的新插槽类型(defaultType: 'fixedslot'):

Ext.define('Ext.ux.MyFixedPicker', {
  extend: 'Ext.field.Select',
  config : {
    defaultPhonePickerConfig : { defaultType: 'fixedslot' }
  }
});

我希望这可以帮助你避免过去六个小时的一些痛苦!我仍然无法准确解释为什么/在Sencha Touch资源中的重要性,但现在它似乎可以解决问题并满足我们的包装截止日期!