我正在尝试在网格中的 rowbody 中呈现一些数据(使用 RowExpander 插件)。我的问题是 ol'rowBodyTpl
对我来说还不够,因为这些数据来自正在呈现的记录中的商店记录(嗯……)。
简单地说:网格的每条记录都有一个商店(我们称之为Items)。所以,我想渲染记录数据和项目记录的一些数据。
这样做的最佳(ish)方式是什么?
覆盖插件的renderer
功能,覆盖,还是都不覆盖?rowexpander
getAdditionalData
谢谢你。
我正在尝试在网格中的 rowbody 中呈现一些数据(使用 RowExpander 插件)。我的问题是 ol'rowBodyTpl
对我来说还不够,因为这些数据来自正在呈现的记录中的商店记录(嗯……)。
简单地说:网格的每条记录都有一个商店(我们称之为Items)。所以,我想渲染记录数据和项目记录的一些数据。
这样做的最佳(ish)方式是什么?
覆盖插件的renderer
功能,覆盖,还是都不覆盖?rowexpander
getAdditionalData
谢谢你。
我知道这个问题已经有几年了,但这是我目前用来处理这种情况的一个技巧。它利用了 XTemplates 允许的“逐字”块。这些允许您通过用{% ... %}
. 在这些代码块中,this
设置为 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>'
]
}
]
});
希望 Sencha 将修复该插件,以便在将来提供一种处理此问题的方法。但目前这运作良好。我用 v4.2.1.883 对此进行了测试,但这应该适用于任何以前版本的 Ext 4。我能想到的唯一可能会阻止它在未来工作的是 XTemplate 的owner
属性不再指向插件,或者插件没有引用带有它的 grid
属性的网格。
我如何“解决”这个问题,它可能会帮助其他人:
我覆盖了rowexpander插件的 getRowBodyFeatureData,因为这个函数不仅接收要应用于模板的数据,还接收记录本身,所以我只是data
从记录中添加了额外的存储/数组。
不确定它是否是最好的方法,但是嘿......至少它有效。
您还可以使用以下if else
语句rowBodyTpl
:
检查 ”:”
"<tpl if='phone == \":\"'>",
"<tpl else>",
"</tpl>"
检查空字符串
"<tpl if='phone == \"\"'>",
"</tpl>"
此示例取自此处:链接
这是我通常的做法:
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:
});