Javascript 如何(正确)使用RowExpander在网格中渲染其他数据
我正在尝试在网格中呈现rowbody中的一些数据(使用RowExpander插件)。 我的问题是ol'Javascript 如何(正确)使用RowExpander在网格中渲染其他数据,javascript,extjs,extjs4.1,Javascript,Extjs,Extjs4.1,我正在尝试在网格中呈现rowbody中的一些数据(使用RowExpander插件)。 我的问题是ol'rowBodyTpl对我来说不够,因为这些数据来自正在呈现的记录(hmmm…)中存储区上的记录 简单地说:网格中的每个记录都有一个存储(我们称之为项)。因此,我想呈现记录数据以及项记录的一些数据 这样做的最佳方式是什么 覆盖rowexpander插件的renderer功能,覆盖getAdditionalData,还是不覆盖 谢谢。我通常是这样做的: Ext.create('Ext.grid.Pa
rowBodyTpl
对我来说不够,因为这些数据来自正在呈现的记录(hmmm…)中存储区上的记录
简单地说:网格中的每个记录都有一个存储(我们称之为项)。因此,我想呈现记录数据以及项记录的一些数据
这样做的最佳方式是什么
覆盖rowexpander
插件的renderer
功能,覆盖getAdditionalData
,还是不覆盖
谢谢。我通常是这样做的:
Ext.create('Ext.grid.Panel',{
border: true,
store: 'ds',
columns: []
plugins: [{
ptype: 'rowexpander',
rowBodyTpl : ['<p><b>Title:</b>{name}<br/><b>Description:</b> {description}<br/><b>Experiment Design:</b> {experimentdesign}</p>']
}],
renderTo:
});
Ext.create('Ext.grid.Panel'{
边界:是的,
商店:“ds”,
列:[]
插件:[{
p类型:“行扩展器”,
rowBodyTpl:['标题:{name}
描述:{Description}
实验设计:{experimentdesign}']
}],
renderTo:
});
我如何“解决”这个问题,它可能会帮助其他人:
我重写了rowexpander插件的getRowBodyFeatureData,因为此函数不仅接收要应用于模板的数据,而且还接收记录本身,所以我只是从记录中添加了额外的存储/数组
不确定这是不是最好的方式,但是嘿。。。至少它是有效的。我知道这个问题已经有几年历史了,但我现在用一个技巧来处理这种情况。它利用了XTemplates允许的“逐字”块。通过使用
{%…%}
包装XTemplate,可以在XTemplate内执行任意代码。在这些代码块中,此
设置为XTemplate本身。XTemplate有一个owner
属性,在我们的例子中,该属性引用RowExpander
插件本身,而插件本身又有一个grid
属性来引用网格。这样,您就可以将任意数据添加到传递到rowBodyTpl
的值中
Ext.create('Ext.grid.Panel', {
...
injectRowBodyData: function(values) {
values.MyInjectedContent = "Here's some extra data!";
},
plugins: [
{
ptype: 'rowexpander',
rowBodyTpl: [
'{% this.owner.grid.injectRowBodyData(value); %}',
'<div>',
'<h1>{Title}</h1>',
'<p>{Content}</p>,
'<p>{MyInjectedContent}</p>',
'</div>'
]
}
]
});
Ext.create('Ext.grid.Panel'{
...
injectRowBodyData:函数(值){
values.MyInjectedContent=“这里有一些额外的数据!”;
},
插件:[
{
p类型:“行扩展器”,
rowBodyTpl:[
“{%this.owner.grid.injectRowBodyData(值);%}”,
'',
“{Title}”,
“{Content},
“{MyInjectedContent}”,
''
]
}
]
});
Hhoppelly Sencha将修复该插件,以便在将来提供处理此问题的方法。但就目前而言,这很有效。我用v4.2.1.883测试了这一点,但这应该适用于Ext4的任何早期版本。我能想到的唯一可能阻止它在将来工作的事情是XTemplate的
所有者
属性不再指向插件,或者插件的网格
属性没有引用网格。您也可以在rowBodyTpl
中使用if-else
语句:
检查“:”
“”,
"",
""
检查空字符串
"<tpl if='phone == \"\"'>",
"</tpl>"
“”,
""
此示例取自此处:这与普通rowBodyTpl有何不同?
"<tpl if='phone == \"\"'>",
"</tpl>"