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