首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法理解字段ExtJS6.2的呈现程序

无法理解字段ExtJS6.2的呈现程序
EN

Stack Overflow用户
提问于 2019-08-01 14:04:28
回答 1查看 72关注 0票数 0

我在ExtJS和JS方面都很新。

我有一个Ext.Grid和应该显示月份和年份的列,例如“2019年8月”。

通过添加一个新列,月份应该减少,因此结果应该是:第一次添加:2019年8月第二次添加:2019年7月3d添加:2019年6月

我还提供了一个小部件,用于按月和一年从这里选择数据:EXTJS 5 - Date picker year and month only

也许我应该提供更多的代码,或者你能建议我应该学些什么吗?

代码语言:javascript
复制
 dataIndex: 'picker',
...

renderer: function (value, cell, record) {
            if (!value && record.get('year') && record.get('month')) {
                value = new Date(record.get('year'), record.get('month') - 1);
                record.set('picker', value);
            }
            return Ext.Date.format(value, 'M, Y');

现在,月份在增加,而不是减少。

EN

回答 1

Stack Overflow用户

发布于 2019-08-02 08:05:18

renderer函数在ExtJS中仅仅是一个函数,对于给定的列,对网格中的每一行都调用该函数。此函数的输出用于在网格的特定单元格内呈现文本。

如果您想要做的是允许动态地向网格中添加列,并且与前一个月相比,新列的值为“减1”,那么您需要做的是构建一个带有特定附加参数的呈现器,例如可以使用JavaScript的bind方法。每次添加列时,都会创建这样的呈现器实例,传递不同的值。

下面的StackOverflow帖子将提示您如何使列动态:

How to dynamically add columns for Grid ExtJs

至于renderer函数及其用法,大致如下:

代码语言:javascript
复制
function customRenderer(value, cell, record) {
    var result = value - this.index;
    return value + " - " + this.index + ' = ' + result;
}

var columns = [];
for(var i = 0; i < 10; i++) {
    var column = {};
    column.dataIndex = 'column' + i;
    column.text = 'Column ' + i;
    column.renderer = customRenderer.bind({ index: i, column: column });
}

reconfigureExtJSColumnsPseudoFunction(columns);

当然,上面的代码将根据您的需要进行调优,使用customRenderer函数并更改其作用域,从而允许您为它提供额外的上下文。for循环中的每一次迭代都将创建运行在不同作用域(通过bind方法)中的该函数的新“版本”,从而确保每一列将收到index属性的不同值,从而允许您根据列索引本身动态更改减去的数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57310890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档