2012-04-12 58 views
1

我明白'选择字段'是为了从您提供的现有'选项'(或来自'商店'中的条目)中进行选择。Sencha touch 2.0:将'空'选择添加到选择字段

我想要的是,为用户不选择任何选项的可能性。 最重要的是,当没有选项被选中时(如“选择一个...”),有能力显示一个占位符。

当前的selectfield行为是,如果您没有提供初始值或不属于“选项”(或您的“商店”)的初始值,则默认情况下选择第一项。

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

有没有人这样做的一个有效的解决方案(覆盖selectfield?延伸的新领域?)

回答

1

两个压倒一切的Ext.field.Select,拓展新的领域都能够达到你所需要的,但我真的很喜欢第二个解决方案。根据我的经验,无论用户从您的selectfield中选择“空”还是“非空”选项,都会采用后续流程。例如:

  • 将它作为“空”值保存到数据库中。
  • 简单地忽略它。

此外,因为它实际上是一个选项,用户可以在任何时候选择“非空”选项后再次选择“空”选项。

当然,它会烦恼一点,特别是当你与很多商店工作。但考虑到灵活性和易用性,我推荐此解决方案。

+1

谢谢,第二个解决方案,你的意思是添加一个条目,我有每个商店?有没有办法将这样的条目自动添加到所有商店?由于我的商店是从本地存储加载的,我可以在加载代理后添加这个“假”条目吗? – borck 2012-04-12 16:22:24

+0

你可以通过听'负载'事件 – 2012-04-12 16:45:24

+0

自动添加!谢谢... – borck 2012-04-12 18:06:41

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]); 
    } 
}); 
+0

神奇的解决方案... :-) – inane 2015-09-17 10:58:02

+0

如果您在视图中使用placeHolder属性,此解决方案不起作用..并且我不知道为什么.. – inane 2015-10-26 15:45:55