我使用Ext Scheduler(http://www.bryntum.com/products/scheduler/)构建简单的应用程序。 我试图为树列添加自定义渲染器,树形图中将有人物图标。
我已为该列创建了渲染:
renderer: function (v, m, r) {
if (r.get('leaf')) {
return '<div style="float: left">' +
r.get('Name') +
'</div>'+
'<img data-qtip="<img src=iconUrl.png width=60px height=60px/>" '+
'src="iconUrl.png" '+
'width="20px" height="20px" style="float: right; margin-right: 5px"/>';
}
return v;
}
这看起来不错,但对于长名字,我会看到不需要的东西:
查看thrue代码我发现了一些不需要的标记:
我需要的是几乎与标准树列相同的渲染器,但我需要在该列的右侧添加额外的图标 - 员工图像缩略图。
我正在搜索文档,我发现有一个名为cellTpl
的私有财产(http://docs.sencha.com/extjs/4.2.1/source/Column2.html#Ext-tree-Column)
但我不知道如何更改此内容,我应该更改此内容,因为它在顶部标记为私有。
如何更改该渲染器以使效果与上一张图像一样?
这里有一些jsfiddle:http://jsfiddle.net/Misiu/gwFdr/
答案 0 :(得分:2)
我结束了Ext.tree.Column
,而不是正常的叶子图标,它显示缩略图
这是我的代码:
Ext.define('Grafik.component.tree.Column2', {
extend: 'Ext.tree.Column',
alias: 'widget.treecolumn2',
thumbnailsServiceUrl:'',
cellTpl: [
'<tpl for="lines">',
'<img src="{parent.blankUrl}" class="{parent.childCls} {parent.elbowCls}-img ',
'{parent.elbowCls}-<tpl if=".">line<tpl else>empty</tpl>"/>',
'</tpl>',
'<img src="{blankUrl}" class="{childCls} {elbowCls}-img {elbowCls}',
'<tpl if="isLast">-end</tpl><tpl if="expandable">-plus {expanderCls}</tpl>"/>',
'<tpl if="checked !== null">',
'<input type="button" role="checkbox" <tpl if="checked">aria-checked="true" </tpl>',
'class="{childCls} {checkboxCls}<tpl if="checked"> {checkboxCls}-checked</tpl>"/>',
'</tpl>',
'<img src="{loginUrl}" class="{childCls} {baseIconCls} ',
'{baseIconCls}-<tpl if="leaf">leaf<tpl else>parent</tpl> {iconCls}"',
'<tpl if="icon">style="background-image:url({icon})"</tpl>/>',
'<tpl if="href">',
'<a href="{href}" target="{hrefTarget}" class="{textCls} {childCls}">{value}</a>',
'<tpl else>',
'<span class="{textCls} {childCls}">{value}</span>',
'</tpl>'
],
treeRenderer: function (value, metaData, record, rowIdx, colIdx, store, view) {
var me = this,
cls = record.get('cls'),
renderer = me.origRenderer,
data = record.data,
parent = record.parentNode,
rootVisible = view.rootVisible,
lines = [],
parentData;
if (cls) {
metaData.tdCls += ' ' + cls;
}
while (parent && (rootVisible || parent.data.depth > 0)) {
parentData = parent.data;
lines[rootVisible ? parentData.depth : parentData.depth - 1] =
parentData.isLast ? 0 : 1;
parent = parent.parentNode;
}
return me.getTpl('cellTpl').apply({
record: record,
baseIconCls: me.iconCls,
iconCls: data.iconCls,
icon: data.icon,
checkboxCls: me.checkboxCls,
checked: data.checked,
elbowCls: me.elbowCls,
expanderCls: me.expanderCls,
textCls: me.textCls,
leaf: data.leaf,
expandable: record.isExpandable(),
isLast: data.isLast,
blankUrl: Ext.BLANK_IMAGE_URL,
loginUrl: data.leaf ? me.thumbnailsServiceUrl + record.get('Login') : Ext.BLANK_IMAGE_URL,
href: data.href,
hrefTarget: data.hrefTarget,
lines: lines,
metaData: metaData,
// subclasses or overrides can implement a getChildCls() method, which can
// return an extra class to add to all of the cell's child elements (icon,
// expander, elbow, checkbox). This is used by the rtl override to add the
// "x-rtl" class to these elements.
childCls: me.getChildCls ? me.getChildCls() + ' ' : '',
value: renderer ? renderer.apply(me.origScope, arguments) : value
});
}
});
用法如下:
{
text: 'Users',
dataIndex: 'Name',
hideable: false,
width: 260,
xtype: 'treecolumn2',
sortable: true,
resizable: false,
thumbnailsServiceUrl: window.appUrl + 'api/Thumbnails/'
}
api/Thumbnails
是服务,登录并返回图像
简单的解决方案,希望它可以帮助某人:)