找回密码
 立即注册

QQ登录

只需一步,快速开始

wss.

初级会员

49

主题

149

帖子

452

积分

初级会员

积分
452
wss.
初级会员   /  发表于:2020-4-15 16:25  /   查看:3102  /  回复:6
你好大神,在表格内置过滤的使用上我发现存在一个对应映射值显示问题,在当前列的单元格内容映射中,我i以通过formatItem映射子表的text内容显示在表格中,可是当我点击过滤器进行过滤的时候却发现显示的时对应绑定的value值

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

6 个回复

倒序浏览
wss.
初级会员   /  发表于:2020-4-15 16:32:29
沙发
补充一下,运用dataMap就是好的,但是应用formatItem去对应显示就会有这样的问题,之前因为存在多个值映射的情况我发帖问过,当时是说运用formatItem进行自定义方法显示,但是运用了formatItem就会出现上述的问题
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-4-15 18:11:30
板凳
你好,这个问题需要一些时间来调研,明天下午18点前可以回复。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-4-16 15:50:51
地板
你好,这个问题实际上是由于数据源的toString 方法没有正常重写导致的,
加上toString后,不仅过滤,排序也是正常的。

参考附件的示例,关键代码如下:

  1. var productsString = function(){
  2.                 return this.name;
  3.         }
  4.     var products = [
  5.         { id: 0, name: 'Widget', unitPrice: 23.43, toString:productsString },
  6.         { id: 1, name: 'Gadget', unitPrice: 12.33, toString:productsString },
  7.         { id: 2, name: 'Doohickey', unitPrice: 53.07, toString:productsString }
  8.     ];
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
wss.
初级会员   /  发表于:2020-4-16 17:47:31
5#
KevinChen 发表于 2020-4-16 15:50
你好,这个问题实际上是由于数据源的toString 方法没有正常重写导致的,
加上toString后,不仅过滤,排序 ...

你好,我在页面上对于功能需求上对应做了处理,也就是说
1、每个值都有对应绑定的value值,通过这些值去寻找子表的对应text值
2、根据你的代码时直接把子表的数据放在单元格绑定上,但是可能会有对应单元格取值进行别的操作,所以这里值需要是一个对应绑定关系
我在你的demo上进行了一些更改,发现还是存在问题
  1.    for (var i = 0; i < 3; i++) {
  2.                         data.push({
  3.                             id: i,
  4.                             date: new Date(dt.getFullYear(), i % 12, 25, i % 24, i % 60, i % 60),
  5.                             time: new Date(dt.getFullYear(), i % 12, 25, i % 24, i % 60, i % 60),
  6.                             country: countries[Math.floor(Math.random() * countries.length)],
  7.                             product:"0,1",       //这里会是单一值的value或者多个值的value
  8.                             amount: Math.random() * 10000 - 5000,
  9.                             discount: Math.random() / 4
  10.                         });
  11.                     }
复制代码
  1. theGrid.formatItem.addHandler(function (s, e) {
  2.                         // custom rendering for "Diff" columns
  3.                         if (e.panel == s.cells) {
  4.                             var col = s.columns[e.col];
  5.                             if (col.binding == 'product') {
  6.                                 var productItem = s.getCellData(e.row, e.col);
  7.                                                 var eCel = productItem.split(",");
  8.                                                 var eCelItem=[]
  9.                                            $.each(eCel, function(i, item){
  10.                                                         $.each(products, function(t, items){
  11.                                                                 if(item==items.id){
  12.                                                                         eCelItem.push(items.name)
  13.                                                                 }
  14.                                                         })
  15.                                            });
  16.                                 e.cell.innerHTML = eCelItem.toString()
  17.                                                  // e.cell.innerHTML = productItem.name;
  18.                             }
  19.                         }
  20.                     });
复制代码


回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-4-17 10:53:13
6#
你好,你这里实际上是一个多对一,也就是多选的需求,用DataMap这个实在无法实现,

自定义的MultiSelect应该是可以实现的,但需要一些时间来编码,我下午18:00前可以回复你。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-4-17 14:40:24
7#
参考附件示例。关键代码:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部