2012-03-23 6 views
0

グリッド行の値に応じて、エディタグリッド内のコンボエディタの特定の項目を無効にしようとしています。グリッド内の値に応じてコンボエディタの項目を無効にする

以下のコードの問題は、コンボが最初に使用されたときにコンボ項目を正しく無効にすることですが、後で同じままにすることです。

コンボをクリックすると、フォーカスイベントが常に発生し、サイクルが実行され、r.dataが更新されますが、最初の表示後にコンボ項目が表示される方法は変更されません。

誰かがこれを修正する方法を教えてくれますか?

Thx。

SWK

var lifecycle_combo = new Ext.form.ComboBox({ 
    typeAhead : true, 
    mode : 'local', 
    triggerAction : 'all', 
    valueField : 'value', 
    lazyRender : true, 
    displayField : 'text', 
    store : ref_lifecycle_store, 
    listeners : {    
     focus: function(combo, gr, index){ 
      var lfc=usergrid.activeEditor.record.data.ref_lifecycle; 
      ref_lifecycle_store.each(function(r){ 
       switch(lfc) 
       { 
       case 'anonymized': 
        if (r.id!='deleted') 
         r.data.selectable=false; 
        break; 
       case 'deleted': 
        r.data.selectable=false; 
        break; 
       default: 
        if (r.id=='logged_in' || r.id=='some_closed' || r.id=='all_closed') 
         r.data.selectable=false; 
        else 
         r.data.selectable=true; 
       } 
      });  
     },    
     beforeselect : function(combo, r, index) {     
      return r.get('selectable'); 
     } 
    }, 
    tpl: '<tpl for=".">' + 
    '<div ext:qtip="{tip}" class="x-combo-list-item ' + 
     '<tpl if="selectable == false">' + 
      'x-combo-list-item-unselectable' + 
     '</tpl>' + 
    '">{text}</div>' + 
    '</tpl>' 
}); 

答えて

0

はこのExtJs4または4ですか?コンボボックスで使用しているストアをフィルタリングするだけです。これは、フィルタリングしたレコードだけを残す必要があります。

+0

そのExtJs 3.4。フィルタリングに関するアイデアをありがとう。この時点で私は無効にすることを好むだろうが、私は最終的に無効にすることができなければ、フィルタリングを検討する。 – SunWuKung

0

フィールド値をストアから取っているので、フィールド値に対して行われた操作はすべてストアのみで行う必要があります。最良の方法は、アイテムをgetStoreを使用して取得して削除し、 removeAt()メソッドを使用しています

+0

提案していただきありがとうございますが、すべてのケースで同じセットのオプションを表示したい場合は、一部のオプションのみを無効にする必要があります。私は、これが彼に何が起こっているのかをユーザーにもっと安心させると思う。 – SunWuKung

関連する問題