2

我遇到了无法解决的在我的应用程序中,我在批处理编辑模式下使用,以允许数据输入人员快速编辑屏幕上的多个记录。这个特定的网格设置为允许分页和排序。

我正在寻找一种方法来在尝试排序或单击其中一个分页链接时提示用户,同时在特定页面上进行了编辑(如在数据网格/数据源的页面中)。如果用户单击“确定”,那么我想继续到下一页数据,否则我想取消编辑并将用户保留在现有编辑的当前页面上。我的另一个选择只是在分页或排序时自动提交任何更改,或者允许它们取消并保留在当前页面上。

到目前为止,我的尝试是使用实际网格数据源上的更改事件将脏标志存储到可观察对象中,然后尝试通过侦听网格的 dataBinding 事件来捕获实际的排序或分页更改,并在我的时候显示提示isDirty 标志为 true 并且 dataBinding 事件的 e.action == "rebind"。

我使用这种方法遇到的问题是 dataBinding 事件在网格数据源已经执行另一个页面的获取之后触发,而不是之前。这使我无法保存任何编辑,甚至无法维护现有的编辑。

我找不到任何可以订阅的事件,这些事件将允许我在页面获取/排序之前进行检查。有没有其他人想出一种方法来处理这种情况?在我看来,这将是人们希望在数据输入应用程序中处理的一件很常见的事情。

4

1 回答 1

0

我通过订阅数据源的 requestStart 事件解决了我的问题。所以现在我的剑道数据源看起来像这样:

{
    pageSize: 15,
    batch: false,
    schema: {
        model: {
            id: "LocalId",
            fields: {
                LocalId:
                {
                    editable: false,
                    nullable: true
                },
                Ssn: {
                    validation: {
                       required: true
                    }
                },
                QtrEarnings: {
                    type: "number",
                    defaultValue: 0,
                    validation: { required: true, min: 0 }
                }
            }
        }
    },
    change: function (e) {
        onDataChange(e);
    },
    requestStart: function (e) {
        if (homeModel.get("dataSource").hasChanges()) {
            if (confirm("You have made edits to data! Click Cancel to stay on this page or click Ok to abandon your changes and continue.") == false) {

                e.preventDefault();
            }
        }
    }
}
于 2016-02-10T10:29:29.380 回答