1

デフォルトでは、レンダラーは常に呼び出し元のオブジェクトをスコープとして参照していると思います。何も定義する必要はありませんが、私のグリッドでは動作が異なります。

rendere 関数のランタイムを定義する必要があります。

列オブジェクトを作成し、列ごとにレンダラーを割り当てます。

for (var i = 0; i < columns.length; i++) {
      newRenderer = function (v, m, r, rI, cI, s)
      { 
           if(this.originalRend)  <<<<<-----------------
           // "this" is not object of column but whole page.
           { 
                 //then call original} 
           else {
                 // call new renderer
           }
      }
      columns[i].originalRend = columns[i].renderer;
      columns[i].renderer = newRenderer;
}

私のnewRenderer関数では、「THIS」は列オブジェクトを参照していません。どうして?????そしてそれを行う方法????

4

2 に答える 2

1

スコープは列またはこれとして機能しません。最良の方法は、ヘッダー コンテナーの prepareData メソッドをオーバーライドすることです。

Ext.override(Ext.grid.header.Container, {
prepareData: function(data, rowIdx, record, view, panel) {
        //console.log("we r in prepare Data");
        var me        = this,
            obj       = {},
            headers   = me.gridDataColumns || me.getGridColumns(),
            headersLn = headers.length,
            dirtyCls = me.dirtyCls,
            colIdx    = 0,
            header,
            headerId,
            renderer,
            value,
            metaData,
            store = panel.store;

        for (; colIdx < headersLn; colIdx++) {
            metaData = {
                tdCls: '',
                style: ''
            };
            header = headers[colIdx];
            headerId = header.id;
            renderer = header.renderer;
            value = data[header.dataIndex];

            if (typeof renderer == "function") {
                value = renderer.call(
                    //--------change made below.------------------
                    header.scope || header || me.ownerCt, 
                    //----------------end-------------------------
                    value,
                    // metadata per cell passing an obj by reference so that
                    // it can be manipulated inside the renderer
                    metaData,
                    record,
                    rowIdx,
                    colIdx,
                    store,
                    view
                );
            }

            // <debug>
            if (metaData.css) {
                // This warning attribute is used by the compat layer
                obj.cssWarning = true;
                metaData.tdCls = metaData.css;
                delete metaData.css;
            }
            // </debug>
            if (me.markDirty) {
                obj[headerId + '-modified'] = record.isModified(header.dataIndex) ? dirtyCls : '';
            }
            obj[headerId+'-tdCls'] = metaData.tdCls;
            obj[headerId+'-tdAttr'] = metaData.tdAttr;
            obj[headerId+'-style'] = metaData.style;
            if (typeof value === 'undefined' || value === null || value === '') {
                value = header.emptyCellText;
            }
            obj[headerId] = value;
        }
        return obj;
    },

}
于 2013-06-18T14:43:24.003 に答える