私はチェックカラム付きのグリッドを持っています。たとえば、dataIndex は「checked」です。
たとえば、別の値「can_be_checked」がfalse/空である行のチェックボックスを無効または非表示にしたい。
Renderer はすでに checkcolumn で定義されているため、いじるとチェックボックスの生成が壊れます。
どうすればいいですか?
レンダラーのすぐ内側にあるチェックボックスを非表示にすることができます。次に例を示します。
column.renderer = function(val, m, rec) {
if (rec.get('can_be_checked') == 'FALSE'))
return '';
else
return (new Ext.ux.CheckColumn()).renderer(val);
};
私はこれに対する解決策を探していて、この質問に出くわしましたが、他の回答で説明されているように、NO チェックボックスの代わりに無効なチェックボックスを表示する実行可能な解決策はどこにもありません。ちょっと複雑でしたが、これが私がやったことです(4.1.0の場合):
で使用されているextjs\examples\ux\css\CheckHeader.cssファイルにはExt.ux.CheckColumn
無効なクラスがないことがわかったので、ext-all.cssに含まれる標準のチェックボックス スタイルに近づけるように変更する必要がありました (無効化されたチェックボックス クラスが含まれます)。
Ext.ux.CheckColumn
無効なチェックボックスからイベントが発生しないように拡張する必要がありました。
最後に、ロジックに従って無効なクラスを適用するために、独自のレンダラーを提供する必要がありました。
コードは次のとおりです。
変更された CheckHeader.css:
.x-grid-cell-checkcolumn .x-grid-cell-inner {
padding-top: 4px;
padding-bottom: 2px;
line-height: 14px;
}
.x-grid-with-row-lines .x-grid-cell-checkcolumn .x-grid-cell-inner {
padding-top: 3px;
}
.x-grid-checkheader {
width: 13px;
height: 13px;
background-image: url('../images/checkbox.gif');
background-repeat: no-repeat;
background-color: transparent;
overflow: hidden;
padding: 0;
border: 0;
display: block;
margin: auto;
}
.x-grid-checkheader-checked {
background-position: 0 -13px;
}
.x-grid-checkheader-disabled {
background-position: -39px 0;
}
.x-grid-checkheader-checked-disabled {
background-position: -39px -13px;
}
.x-grid-checkheader-editor .x-form-cb-wrap {
text-align: center;
}
上記の背景画像の URL は、通常extjs\resources\themes\images\default\form\checkbox.gifにある extjs 4.1.0 に同梱されているこの画像を指しています。
Ext.ux.CheckColumn クラスを拡張して、無効なチェックカラムからイベントが発生しないようにします。
Ext.define('MyApp.ux.DisableCheckColumn', {
extend: 'Ext.ux.CheckColumn',
alias: 'widget.disablecheckcolumn',
/**
* Only process events for checkboxes that do not have a "disabled" class
*/
processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
var enabled = Ext.query('[class*=disabled]', cell).length == 0,
me = this;
if (enabled) {
me.callParent(arguments);
}
},
});
私自身のロジックに従って無効なクラスを適用するためのカスタムレンダラーを使用した実装:
column = {
xtype: 'disablecheckcolumn',
text: myText,
dataIndex: myDataIndex,
renderer: function(value, meta, record) {
var cssPrefix = Ext.baseCSSPrefix,
cls = [cssPrefix + 'grid-checkheader'],
disabled = // logic to disable checkbox e.g.: !can_be_checked
if (value && disabled) {
cls.push(cssPrefix + 'grid-checkheader-checked-disabled');
} else if (value) {
cls.push(cssPrefix + 'grid-checkheader-checked');
} else if (disabled) {
cls.push(cssPrefix + 'grid-checkheader-disabled');
}
return '<div class="' + cls.join(' ') + '"> </div>';
}
};