javascript - 无法理解字段 ExtJS6.2 的渲染器
问题描述
我对 ExtJS 和 JS 都很陌生。
我有一个 Ext.Grid 和应该显示月份和年份的列,例如“2019 年 8 月”。
通过添加一个新列,月份应该递减,所以结果应该是:第一次添加:2019 年 8 月第二次添加:2019 年 7 月第三次添加:2019 年 6 月 ...
我还有一个小部件,用于从此处仅按月份和年份选择数据: EXTJS 5 - 仅日期选择器年份和月份
也许我应该提供更多代码,或者你能建议我应该学习什么?
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');
现在月份在增加,而不是减少。
解决方案
ExtJS 中的renderer
函数只是一个函数,对于给定的列,网格中的每一行都会调用它。此函数的输出用于在网格的特定单元格内呈现文本。
如果您想要做的是允许向网格动态添加列,并且新列的月份值与上个月相比“减 1”,那么您需要做的是构建一个具有某些特定功能的渲染器附加到它的附加参数,例如,您可以使用 JavaScript 的bind
方法来执行此操作。每次添加列时,都会创建此类渲染器的实例,并传递不同的值。
以下 StackOverflow 帖子将为您提供有关如何使列动态化的提示:
至于renderer
功能及其用法,大致如下:
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
属性值,从而允许您动态更改您将减去的数量基于列索引本身。
推荐阅读
- javascript - Regex replacement of a partial string inside JS file
- javascript - 在visualforce页面上点击第一个按钮激活第二个按钮
- python - scrapy_splash 抓取了 0 件商品
- python - 如何减少字典的内存占用?
- laravel - npm 不构建最新文件
- git - 撤消一个分支中一个文件的所有历史记录
- 3d-modelling - 如何在 Cinema 4d 中“展平”/“压缩”网格?
- android - 从 gradle 构建 APK 时设置“buildNumber”和“versionNumber”
- c# - 将 ng 十进制数字寻址到 datagridview
- jquery - 根据条形图的颜色更改高图上的 dataLabels