我认为this
是控制器 Ext.grid.Panel
的范围(如果没有另外定义,请参阅编辑),这就是为什么它不能通过使用关键字来工作。无论如何,第二个是更好的解决方案 IMO
编辑:
正如@kevhender 评论的那样,可以为渲染器定义范围。但是,当您使用其中一个论点时,这是没有意义的。无论如何,我错过了提及它。
编辑 2 - 为什么是默认范围Ext.grid.Panel
:
这是处理渲染的函数的片段。该方法是私有的,因此未在 API 中列出。无论如何,这是源链接。请注意,渲染器使用给定范围或所有者容器column.renderer.call(column.scope || me.ownerCt,//...
的范围调用,视图的所有者是它嵌套的面板。
/**
* @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