首页 文章

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

提问于
浏览
2

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

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

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

我使用这种方法的问题是,在网格dataSource已经执行了另一个页面的提取而不是之前的事件之后,dataBinding事件会触发 . 这可以防止我保存任何编辑或甚至维护现有编辑 .

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

1 回答

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

相关问题