Sencha touch 2.0:将“空”选项添加到选择域

时间:2012-04-12 13:45:33

标签: sencha-touch-2

我理解“选择字段”是指您提供的现有“选项”(或“商店”中的条目)。

我想要的是用户不选择任何选项的可能性。 最重要的是,如果没有选择任何选项(例如“选择一个......”),就可以显示占位符。

当前的选择字段行为是,如果您没有提供初始值或不属于'options'(或您的'store'),则默认选择第一个项目。

关于选择器,我不介意在选择一个选项后是否无法返回空选择。我想要的是如果不触摸它,可以选择空选区。

有没有人这样做的有效解决方案(覆盖selectfield?扩展新字段?)

2 个答案:

答案 0 :(得分:3)

这是Thiem Nguyen扩展Select字段的解决方案的通用实现。希望它能节省一些时间;)

/**
 * Adds an additional option to a select field filled by a store
 * @cfg {mixed} valueFieldValue Value of the added option
 * @cfg {string} displayFieldValue Text to display for the added option
 */
Ext.define('util.field.SelectPlus', {
    extend: 'Ext.field.Select',
    xtype: 'selectfieldplus',
    alternateClassName: 'Ext.field.SelectPlus',
    requires: 'Ext.data.Store',

    config: {
        displayFieldValue: '',
        valueFieldValue: ''
    },

    /**@override
     * Insert our item each time the store is loaded
     * @param {Ext.data.Store} store The refreshed store
     */
    onStoreDataChanged: function(store) {
        if(store.findExact(this.getValueField(), this.getValueFieldValue()) === -1) { //prevent infinite loop ;)
            var item = Ext.create(store.getModel());
            item.set(this.getValueField(), this.getValueFieldValue());
            item.set(this.getDisplayField(), this.getDisplayFieldValue());
            store.insert(0, item);
        }
        this.callParent([store]);
    }
});

答案 1 :(得分:1)

覆盖Ext.field.Select和扩展新字段都能够实现您的需求,但我真的更喜欢第二种解决方案。根据我的经验,无论用户选择"空"或"非空"选择字段中的选项,始终采用后续流程。例如:

  • 将其保存到数据库中"清空"值。
  • 完全忽略它。

此外,由于它实际上是一个选项,用户可以选择"清空"选择"非空"后再次选择随时选择。

当然它会烦恼一点,特别是当你和很多商店合作时。但考虑到灵活性和易用性,我建议使用此解决方案。