2012-04-12 8 views
1

私は 'selectfield'はあなたが提供する既存の 'オプション'(または 'store'のエントリ)の中から選択することを理解します。Sencha touch 2.0:selectフィールドに '空の'選択を追加

私が望むのは、ユーザーがオプションを選択しないことです。 それに加えて、オプションが選択されていない場合(「Select one ...」のようなもの)、プレースホルダを表示することができればうれしいでしょう。

現在の選択フィールドの動作は、初期値を指定しないか、 'options'(または 'store')に属さない場合、デフォルトで最初の項目が選択されます。

1つのオプションを選択した後、空の選択に戻る方法がない場合は、ピッカーについては気にしません。私が望むのは、選択フィールドに触れないと空の選択肢を残す可能性です。

誰もこれを行うための有効な解決策を(selectfieldをオーバーライドは?新しいフィールドを拡張?)を持つ

答えて

1

両方Ext.field.Selectをオーバーライドして、新しいフィールドを拡張するには何が必要達成することができますが、私は本当に第二の溶液を好みます。私の経験では、ユーザーがselectフィールドから "空"または "空でない"オプションを選択しても、後続のプロセスは常に行われます。例:

  • 「空の」値としてデータベースに保存します。
  • 単純に無視してください。

また、実際にはオプションであるため、いつでも「空でない」オプションを選択してから「空」オプションを再度選択することができます。

もちろん、あなたが多くの店舗で働いているときは、ちょっと気になります。しかし、柔軟性と使いやすさを考慮して、このソリューションをお勧めします。

+1

ありがとう、2番目のソリューションでは、私が持っているすべてのストアにエントリを追加することを意味しますか?そのようなエントリをすべての店舗に自動的に追加する方法はありますか?私のストアはローカルストレージからロードされているので、プロキシをロードした後にこの「偽の」エントリを追加できますか? – borck

+0

あなたは 'load'イベント –

+0

を聞いて自動的に追加することができます!ありがとう... – borck

3

ここでは、選択フィールドを拡張するThiem Nguyenのソリューションの一般的な実装を示します。 )時間が節約されることを願っています。

/** 
* 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

+0

ビューでplaceHolderプロパティを使用している場合、この解決策は機能しません。理由はわかりません。 – inane

関連する問題