我的应用程序已接近完成,但有一个错误,我必须在发布之前对其进行排序。该应用程序使用Cordova 3.4和Sencha为iOS和Android构建“原生”应用程序(该bug仅与iOS有关)
基本上,当更改选择器值时,除非用户在单击“完成”方面的速度足够快,否则它将恢复为之前的值 - 难以解释! Here是一段视频,展示了行动中的错误。
如前所述,这只是iOS上的一个问题(Android很好)。值得注意的是,当应用程序中的其他选择器中有两个值选项时,此错误不存在。例如,时间(小时和分钟)和日期(日和月)的选择器没有此错误 - 只有单个值选择器有问题。
有什么想法吗?
答案 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资源中的重要性,但现在它似乎可以解决问题并满足我们的包装截止日期!