2013-07-08 48 views
0

我動態地將額外的列添加到ExtJs網格,所以我將索引存儲爲類變量。 但是,這似乎工作如下所示。爲什麼是這樣?無法訪問此.myvar在extjs

for (var i = 0; i < names.length; i++) { 
var column = Ext.create('Ext.grid.column.Column', { 
    text : names[i], 
    header : names[i], 
    width : 80, 
    dIndx: i, 
    renderer: function (val, p, record) { 
     var value = record.data.values[this.dIndx]; // doesn't work 
     var value = record.data.values[p.column.dIndx]; // this works 
    return value ? value : ""; 
    } 
    }); 
// add column to grid etc. 
+0

'this'設置爲該函數內的渲染器函數,在列定義中使用'scope'爲渲染器定義'this'。 – kevhender

+1

保存幾個字符的另一個技巧 - 您的返回語句可以是'返回值|| ''' – kevhender

回答

1

我覺得this控制器的範圍Ext.grid.Panel(如果不是另有說明,請參閱編輯)這就是爲什麼它通過使用關鍵字wan't工作。無論如何,第二個是更好的解決方案IMO

編輯

如@kevhender一個scope可以爲渲染器被定義註釋。但是,當你使用其中一個參數時,這是沒有意義的。無論如何,我錯過了提及它。

編輯2 - 爲什麼是默認的範圍Ext.grid.Panel

這裏有一個從加工渲染功能剪斷。該方法是私有的,因此不在API中列出。無論如何,這裏是source link。請注意,呈現器將使用給定範圍或所有者容器的作用域進行調用。視圖的所有者是其嵌套到的面板。

/** 
* @private 
* Emits the HTML representing a single grid cell into the passed output stream (which is an array of strings). 
* 
* @param {Ext.grid.column.Column} column The column definition for which to render a cell. 
* @param {Number} recordIndex The row index (zero based within the {@link #store}) for which to render the cell. 
* @param {Number} columnIndex The column index (zero based) for which to render the cell. 
* @param {String[]} out The output stream into which the HTML strings are appended. 
*/ 
renderCell: function(column, record, recordIndex, columnIndex, out) { 
    //... more code 
    if (column.renderer && column.renderer.call) { 
     value = column.renderer.call(column.scope || me.ownerCt, fieldValue, cellValues, record, recordIndex, columnIndex, me.dataSource, me); 
     if (cellValues.css) { 
      // This warning attribute is used by the compat layer 
      // TODO: remove when compat layer becomes deprecated 
      record.cssWarning = true; 
      cellValues.tdCls += ' ' + cellValues.css; 
      delete cellValues.css; 
     } 
    } 
    // ... more code 
+0

很好的答案!爲什麼這是指小組而不是專欄? – fastcodejava

+1

@fastcodejava看我的編輯 – sra