私は に 2 を持ってMultiSelects
いItemSelector
ますFormPanel
。それぞれMultiSelect
が 2 で構成されていStores
ます: 左側と右側 (2 つの間で項目を移動するための矢印付き)。
パネルをロードするとき、現在はそれらを区別する方法がないため、ある側から別の側に移動したアイテムを強調表示するために参照をフィードします (たとえば、移動したアイテムのスタイルを赤に設定します)。
でイベントをキャッチafterAdd
し、Stores
DOM アクセスを介してスタイルを適用することができました。これはトレース中に機能しますが、後で残りの ExtJS 標準呼び出しが実行され、適用したばかりのスタイルがオーバーライドされます...
私がやっていることは良い方法ではないと感じていますが、ExtJS は初めてなので、ここで少し迷っています...助けてくれてありがとう!
EDIT :これが私のコードのサンプルです。ExtJS 3.2 で作業していたことを忘れていました (うーん...)。pool_cnx_to_rule
は私のFormPanel
です:
pool_cnx_to_rule.afterMethod('add', function ()
{
//var pools_available_ = Ext.getCmp('pools_available').getValue();
var pools_selected_ = Ext.getCmp('pools_selected').getValue();
var i, j;
for (i = 0; i < pool_cnx_to_rule.data.length; ++i)
{
var pool_descr_ = pool_cnx_to_rule.data.items[i].data.pool_descr;
var changed = true;
for (j = 0; j < pool_cnx_to_rule_ref.length; ++j)
{
if (pool_cnx_to_rule_ref[j] == pool_descr_)
{
changed = false;
break;
}
}
if (changed)
{
var pools_selected_ = Ext.getCmp('pools_selected');
var nodes_ = pools_selected_.view.getNodes();
var node_ = nodes_[j];
var record_ = pools_selected_.view.getRecord(node_);
record_.set('color', 'red');
// Instead of assigning pools_selected_.view, create var
var view_ = new Ext.ListView({
multiSelect: true,
store: pools_selected_.store,
columns: [{
dataIndex: pools_selected_.displayField,
header: 'Value',
width: 1,
tpl: new Ext.XTemplate(
'<tpl if="red==true">',
'<div class="red">{' + pools_selected_.displayField + '}</div>',
'<tpl else>',
'<div>{' + this.displayField + '}</div>',
'</tpl>'
),
}],
hideHeaders: true
});
pools_selected_.fs.items.clear();
pools_selected_.fs.add(view_);
pools_selected_.fs.doLayout();
}
}
});