0

(RowExpanderプラグインを使用して)グリッド内の行本体にいくつかのデータをレンダリングしようとしています。私の問題は、このデータがレンダリングされているレコードのストア上のレコードからのものであるため、ol'rowBodyTplでは不十分であるということです(うーん...)。

簡単に言うと、グリッドのすべてのレコードにはストアがあります(アイテムと呼びます)。そこで、 Itemsレコードのレコードデータと一部のデータもレンダリングしたいと思います。

そうするための最良の(っぽい)方法は何でしょうか?

プラグインのrenderer機能をオーバーライドするか、オーバーライドするか、またはこれらのどれもオーバーライドしませんか?rowexpandergetAdditionalData

ありがとうございました。

4

4 に答える 4

1

この質問は数年前のものですが、このような状況に対処するために現在使用しているトリックを次に示します。XTemplatesが許可する「逐語的」ブロックを利用します。これらを使用すると、XTemplateをでラップすることにより、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>'
            ]
        }
    ]
});

うまくいけば、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 に答える