找回密码
 立即注册

QQ登录

只需一步,快速开始

eeg1412

注册会员

12

主题

20

帖子

82

积分

注册会员

积分
82
eeg1412
注册会员   /  发表于:2020-3-25 09:56  /   查看:4715  /  回复:3
1金币
本帖最后由 eeg1412 于 2020-3-25 09:57 编辑

在5.20193.646版本中使用removeAt删除或者使用refresh刷新的时候正好介于有滚动条和没滚动条之间的时候会出现空白区域。


↑删除前

↑删除后右侧会出现空白的滚动条占位区域

↑在低版本中则没有这个现象

以下是代码:
  1. <template>
  2.     <div class="container-fluid">
  3.         <label>
  4.             newRowAtTop
  5.             <input v-model="grid.newRowAtTop" @change="onValueChanged" type="checkbox">
  6.         </label>
  7.         <wj-flex-grid :initialized="initData"
  8.             :allowAddNew="true"
  9.             :allowDelete="true"
  10.             :itemsSource="grid.data"
  11.             :newRowAtTo="grid.newRowAtTop">
  12.             <wj-flex-grid-column binding="id" header="ID" :width="'*'"></wj-flex-grid-column>
  13.             <wj-flex-grid-column binding="country" header="国" :width="'*'"></wj-flex-grid-column>
  14.             <wj-flex-grid-column binding="downloads" header="DL数" :width="'*'"></wj-flex-grid-column>
  15.             <wj-flex-grid-column binding="sales" header="売上" :width="'*'"></wj-flex-grid-column>
  16.             <wj-flex-grid-column binding="expenses" header="費用" :width="'*'"></wj-flex-grid-column>
  17.         </wj-flex-grid>
  18.         <button type="button" @click="delRow(1)">delete</button>
  19.     </div>
  20. </template>

  21. <script>
  22.     import "@grapecity/wijmo.styles/wijmo.css";
  23.     import 'bootstrap.css';
  24.     import Vue from 'vue';
  25.     import '@grapecity/wijmo.vue2.core';
  26.     import '@grapecity/wijmo.vue2.grid';

  27.     let App = Vue.extend({
  28.         name: 'app',
  29.         data: function(){
  30.             return {
  31.                 grid: {
  32.                     data: null,
  33.                     newRowAtTop: false,
  34.                     instance: null
  35.                 }
  36.             }
  37.         },
  38.         methods: {
  39.             getData: function(s, e){
  40.                 let countries = 'US,Germany,UK,Japan,Italy,Greece'.split(','),
  41.                     data = [];
  42.                 for (let i = 0; i < countries.length; i++) {
  43.                     data.push({
  44.                         id: i,
  45.                         country: countries[i],
  46.                         downloads: Math.round(Math.random() * 20000),
  47.                         sales: Math.random() * 10000,
  48.                         expenses: Math.random() * 5000
  49.                     });
  50.                 }
  51.                 return data;
  52.             },
  53.             initData: function(grid){
  54.                 this.grid.instance = grid;
  55.                 this.grid.data = this.getData();
  56.             },
  57.             onValueChanged: function(){
  58.                 this.grid.instance.newRowAtTop = this.grid.newRowAtTop;
  59.             },
  60.             delRow(n){
  61.                 this.grid.instance.collectionView.removeAt(n);
  62.             },
  63.         }
  64.     })

  65.     new Vue({ render: h => h(App) }).$mount('#app');
  66. </script>

  67. <style>
  68. .wj-flexgrid {
  69.     height: 200px;
  70.     margin: 10px 0;
  71. }
  72. body {
  73.     margin-bottom: 20pt;
  74. }
  75. </style>
复制代码
将以上代码黏贴至日文版的DEMO中后点击delete复现
https://demo.grapecity.com/wijmo/demos/Grid/Rows/AddingRemoving/vue

中文版的DEMO好像版本比日文版的要低所以黏贴以上代码后不会复现
https://demo.grapecity.com.cn/wijmo/demos/Grid/Rows/AddingRemoving/vue


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

最佳答案

查看完整内容

您好,感谢您的反馈!问题已经重现! 初步分析是在刷新时重排flexGrid的布局时没有触发自适应的机制,如果在grid的host dom上设置固定宽高时会触发这个问题。 暂时可以利用refresh解决这个问题,关键代码如下: 在您提供的示例中,可以拷贝以下代码来查看效果:

3 个回复

倒序浏览
最佳答案
最佳答案
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-3-25 09:56:04
来自 2#
本帖最后由 KevinChen 于 2020-3-25 14:21 编辑

您好,感谢您的反馈!问题已经重现!

初步分析是在刷新时重排flexGrid的布局时没有触发自适应的机制,如果在grid的host dom上设置固定宽高时会触发这个问题。

暂时可以利用refresh解决这个问题,关键代码如下:

  1. <div class="blockcode"><blockquote>            delRow(n){
  2.                 this.grid.instance.collectionView.removeAt(n);
  3.                 console.log(1);
  4.                 var grid = this.grid;
  5.                 setTimeout(function(){
  6.                     grid.instance.refresh(true);
  7.                 }, 10)
  8.             },
复制代码


在您提供的示例中,可以拷贝以下代码来查看效果:

  1. <div class="blockcode"><blockquote><template>
  2.     <div class="container-fluid" >
  3.         <label>
  4.             newRowAtTop
  5.             <input v-model="grid.newRowAtTop" @change="onValueChanged" type="checkbox">
  6.         </label>
  7.         <wj-flex-grid :initialized="initData"
  8.             :allowAddNew="true"
  9.             :allowDelete="true"
  10.             :itemsSource="grid.data"
  11.             :newRowAtTo="grid.newRowAtTop" style="height:225px;">
  12.             <wj-flex-grid-column binding="id" header="ID" :width="'*'"></wj-flex-grid-column>
  13.             <wj-flex-grid-column binding="country" header="国" :width="'*'"></wj-flex-grid-column>
  14.             <wj-flex-grid-column binding="downloads" header="DL数" :width="'*'"></wj-flex-grid-column>
  15.             <wj-flex-grid-column binding="sales" header="売上" :width="'*'"></wj-flex-grid-column>
  16.             <wj-flex-grid-column binding="expenses" header="費用" :width="'*'"></wj-flex-grid-column>
  17.         </wj-flex-grid>
  18.         <button type="button" @click="delRow(1)">delete</button>
  19.     </div>
  20. </template>

  21. <script>
  22.     import "@grapecity/wijmo.styles/wijmo.css";
  23.     import 'bootstrap.css';
  24.     import Vue from 'vue';
  25.     import '@grapecity/wijmo.vue2.core';
  26.     import '@grapecity/wijmo.vue2.grid';

  27.     let App = Vue.extend({
  28.         name: 'app',
  29.         data: function(){
  30.             return {
  31.                 grid: {
  32.                     data: null,
  33.                     newRowAtTop: false,
  34.                     instance: null
  35.                 }
  36.             }
  37.         },
  38.         methods: {
  39.             getData: function(s, e){
  40.                 let countries = 'US,Germany,UK,Japan,Italy,Greece'.split(','),
  41.                     data = [];
  42.                 for (let i = 0; i < countries.length; i++) {
  43.                     data.push({
  44.                         id: i,
  45.                         country: countries[i],
  46.                         downloads: Math.round(Math.random() * 20000),
  47.                         sales: Math.random() * 10000,
  48.                         expenses: Math.random() * 5000
  49.                     });
  50.                 }
  51.                 return data;
  52.             },
  53.             initData: function(grid){
  54.                 this.grid.instance = grid;
  55.                 this.grid.data = this.getData();
  56.             },
  57.             onValueChanged: function(){
  58.                 this.grid.instance.newRowAtTop = this.grid.newRowAtTop;
  59.             },
  60.             delRow(n){
  61.                 this.grid.instance.collectionView.removeAt(n);
  62.                 console.log(1);
  63.                 var grid = this.grid;
  64.                 setTimeout(function(){
  65.                     grid.instance.refresh(true);
  66.                 }, 10)
  67.             },
  68.         }
  69.     })

  70.     new Vue({ render: h => h(App) }).$mount('#app');
  71. </script>

  72. <style>
  73. .wj-flexgrid {
  74.     height: 200px;
  75.     margin: 10px 0;
  76. }
  77. body {
  78.     margin-bottom: 20pt;
  79. }
  80. </style>
复制代码

回复 使用道具 举报
eeg1412
注册会员   /  发表于:2020-3-25 14:50:43
3#
KevinChen 发表于 2020-3-25 14:19
您好,感谢您的反馈!问题已经重现!

初步分析是在刷新时重排flexGrid的布局时没有触发自适应的机制,如 ...

谢谢回复。
这样相当于界面更新了2次吧,我们这边的代码规范里是禁止使用setTimeout的,所以请尽早在未来的版本中修复这个问题。毕竟旧版本反而没有这个问题。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-3-25 17:32:20
4#
好的,这里确实是一个bug,已经提交给产品部门,后期修复后给您回帖反馈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部