2

我对 ng2-smart-table 有疑问,我用一个空的本地数据源填充它。

我有一个 Date 列,它使用自定义编辑器:

dateInscription: {
                title: 'Date',
                filter:false,
                type: 'string',
                valuePrepareFunction: (cell, row) => {
                    return `${new Date(cell).toLocaleDateString()}`;
                },
                editor: {
                    type: 'custom',
                    component: DateRenderComponent,
                },
            }

编辑器扩展了 DefaultEditor,当然还打开了一个日期选择器(p-calendar)。当用户选择日期时,单元格值使用以下方式更新:

onSelect(event)
    {
      this.cell.newValue = this.value;
    }

该事件被很好地触发。这项工作在新的行中......可能有什么问题?

创建行后,我想对其进行编辑,但这不起作用。当我单击“保存”命令时,旧值保持不变(注意其他简单文本列已更新)。

我可以看到在单击“保存”后调用的 valuePrepareFunction 蜂鸣器,带有旧的单元格值。

我仔细检查了 onSelect 事件是否在 cell.newValue 中设置了好的值

有人已经遇到这个问题了吗?解决方案是什么?谢谢 !

4

2 回答 2

1

我解决了我的问题

.html 文件

 <ng2-smart-table [settings]="settings" [source]="source" (editConfirm)="onEditConfirm($event)" >

TS文件

onEditConfirm(event) {
    doEdit(event.newData);

}

在您的事件变量中,使用如上所示的“newData”获取更新的数据

https://github.com/akveo/ng2-smart-table/blob/master/src/app/pages/examples/various/advanced-example-confirm.component.ts

于 2018-06-13T19:52:57.890 回答
0

我确实找到了原因,但不是一个简单的解决方法。我使用 this.source.update(old, new) 重现了提交值的问题。

查看github代码,更新不要用另一个对象替换一个对象,而是“融合”两者......

为此,看起来 localdatasource.prototype.update 使用了旧版本的 deepextend (2014 ...),它不管理缓冲区、正则表达式和日期。

我将在 ng2-smart-table github 上填写一个错误以修复此问题。

现在,您应该删除旧对象并添加新对象,但是您会丢失索引信息......如果我找到相关内容,我会完成我的答案。

于 2018-03-02T21:54:00.950 回答