如何提示用户在更改页面或在Kendo Grid中排序时进行了编辑

时间:2013-08-28 18:30:12

标签: kendo-ui kendo-grid

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

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

到目前为止,我尝试使用实际网格数据源上的change事件将脏标志存储到observable中,然后通过监听网格的dataBinding事件并尝试捕获实际的排序或分页更改并显示当我的isDirty标志为true并且dataBinding事件的e.action ==“rebind”时提示。

我使用这种方法的问题是,在网格dataSource已经执行了另一个页面的提取而不是之前的事件之后,dataBinding事件会触发。这使我无法保存任何编辑内容,甚至无法保留现有编辑内容。

我找不到任何可以订阅的事件,这样我就可以在页面提取/排序之前进行检查。有没有其他人想出办法来处理这种情况?在我看来,人们想要在数据输入应用程序中处理它是一件非常普遍的事情。

1 个答案:

答案 0 :(得分:0)

我通过订阅dataSource的requestStart事件解决了我的问题。所以现在我的Kendo Datasource看起来像这样:

{
    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();
            }
        }
    }
}