2016-10-25 19 views
0

私はコンボボックス(ExtJs 6)を持っています。リストの各行に値と削除ボタンを表示したいと思います。 私はXTemplateを試しましたが、それ以上の値は選択されていないので、削除ボタンから関数を呼び出す方法はわかりません。 どうすればいいですか?どのような例でも分かります。ここでExtJSコンボボックス(テキストとボタン付き)

+1

を持つことはできませんので、あなたは答えはあなたが理解するのに役立ちますので、試してみましたが何を示すべきですあなたが間違っていたところ –

答えて

1

主な部品は以下のとおりです。

  • ドロップダウン
  • に、ボタンをユーザーがクリックした場合のストアから項目を削除するには、ドロップダウンにによってitemClickイベントをリッスンし、イベントを中止レンダリングするテンプレートを作成します。ボタン

https://fiddle.sencha.com/#fiddle/1j7r

var combo = Ext.create({ 
     xtype: 'combo', 
     editable: false, 
     store: ['val1', 'val2', 'val3'], 

     listConfig: { 
      listeners: { 
       itemclick: function(list, record, item, index, e) { 
        if (e.target.tagName == 'BUTTON') { 
         e.preventDefault(); 
         combo.store.removeAt(index); 
        } 
       } 
      } 
     }, 

     tpl: '<ul class="x-list-plain"><tpl for="."><li role="option" class="x-boundlist-item">{field1}<button>x</button></li></tpl></ul>', 

    }); 

@Mr.George's answerは、トリックを行いますが、それはいくつかの問題に苦しんでいる:ちょうどドロップダウンボタンを表示するには、店舗の値を更新する

  • 。代わりにテンプレートを使用する必要があります。これにより、コンボのテキストフィールドにHTMLが表示されます。
  • HTML内のJavaScript。イベントハンドラを使用して代わりに
  • それはグローバルIDに依存していることを意味するExt.getCmpに依存、あなたが同じページ上の2つのインスタンス
+0

nice ty @Juan Mendes –

0

は、あなたが)}

Ext.application({ 
name : 'Fiddle', 

launch : function() { 
    Ext.create({ 
     xtype:'window', 
     width:200, 
     height:200, 
     items:[{ 
      xtype:'combo', 
      id:'myCombo', 
      editable:false, 
      store:['val1','val2','val3'], 
      listeners:{ 
       afterrender:function(combo){ 
        var records=combo.store.data.items; 
        records.forEach(function(rec,index){ 
         var field= rec.get('field1'); 
         rec.set('field1', 
           ''+field+' <button onclick="'+ 
           'Ext.getCmp(\'myCombo\').store.remove(Ext.getCmp(\'myCombo\').store.findRecord(\'field1\',\''+ 
           field+'\'));">Delete</button>'); 

        }); 
       } 
      } 
     }] 
    }).show(); 
} 

ことを行うことができますフィドルhttps://fiddle.sencha.com/#fiddle/1j77

です。

+0

2016年にインラインJavaScriptを追加していると、それはうまくいきませんでした。また、 'Ext.getCmp( 'myCombo')を使うと、再利用可能(1ページに1つしかない)。もしこれが一緒にハックされ、その落とし穴を説明したら、私はそれを投票するだろう –

+0

あなたが望むなら、extjsコンボボックスにボタンを追加しようとすることができます、私の意見ではこれは最も簡単な方法の一つです。他の方法は、domの特定のidにボタンコンポーネントを追加することで、問題はほぼ同じです。コンポーネントをTPLで追加すると、tplからviewcontrollerを取得できなくなります。 –

+0

他の解決策で更新します –

関連する問題