0

我正在尝试在网格中的 rowbody 中呈现一些数据(使用 RowExpander 插件)。我的问题是 ol'rowBodyTpl对我来说还不够,因为这些数据来自正在呈现的记录中的商店记录(嗯……)。

简单地说:网格的每条记录都有一个商店(我们称之为Items)。所以,我想渲染记录数据和项目记录的一些数据。

这样做的最佳(ish)方式是什么?

覆盖插件的renderer功能,覆盖,还是都不覆盖?rowexpandergetAdditionalData

谢谢你。

4

4 回答 4

1

我知道这个问题已经有几年了,但这是我目前用来处理这种情况的一个技巧。它利用了 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属性的网格。

于 2014-01-23T18:01:08.523 回答
0

我如何“解决”这个问题,它可能会帮助其他人:

我覆盖了rowexpander插件的 getRowBodyFeatureData,因为这个函数不仅接收要应用于模板的数据,还接收记录本身,所以我只是data从记录中添加了额外的存储/数组。

不确定它是否是最好的方法,但是嘿......至少它有效。

于 2012-07-20T12:22:51.137 回答
0

您还可以使用以下if else语句rowBodyTpl

检查 ”:”

"<tpl if='phone == \":\"'>",
"<tpl else>",
"</tpl>"

检查空字符串

"<tpl if='phone == \"\"'>",
"</tpl>"

此示例取自此处:链接

于 2016-03-10T16:52:38.173 回答
-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: 
});
于 2012-07-11T21:49:32.407 回答