Kendo ui 使用剑道UI网格实现双向绑定的预期方式是什么?
以下是我试图通过剑道UI网格实现的场景:Kendo ui 使用剑道UI网格实现双向绑定的预期方式是什么?,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,以下是我试图通过剑道UI网格实现的场景: 通过jquery、Restanglar或其他方式检索一些持久化数据 将网格绑定到数据 编辑网格中的数据 向网格中添加新行 单击一些“保存”按钮并将更新的数据发送回服务器 根据我读到的内容,在使用剑道UI网格时,必须包装为数据源提供的数组,以便网格更新原始模型。但是,网格的内置命令在执行此操作时似乎无法正常运行。如以下示例所示,单击行上的“编辑”后,您不能再单击“更新”或“取消”。它只是卡住了。如果不使用数组对其进行包装,现有记录会得到很好的更新,但不会将
最初的示例将id字段显示为其中一列,事实证明这会分散我收到反馈的几个人对真实问题的注意力,因此我将其删除。我还添加了添加新行和添加输出的功能,以查看原始数据源的内容。如果您取消包装ObservalArray并使用普通数组,它似乎可以工作
var sourceData = [
{ id:1, text: "Foo" },
{ id:2, text: "Bar" },
{ id:3, text: "Baz" }
];
我已经有一段时间没有深入研究剑道的内部结构了,但是如果我没记错的话,当你将一个数组传递给新的数据源
时,它会自动将数组包装成可观察的对象
如果使用上面显示的普通数组,然后编辑表中的字段,则可以通过window.sourceData[0]。text
补充说明;由于将数据源的
id
设置为id
属性,因此如果在表中编辑该列,会发生奇怪的事情。ID应该是不可变的。例如,如果您编辑id=1的第一行,并将id更改为3
,那么剑道数据源将获取id=3的项目(第三行),并将文本从“Baz”更改为“Foo”。换句话说,Kendo通过查找其ID而不是跟踪数组中的索引来查找要更改的项。如果您取消包装ObservalArray并改用普通数组,它似乎可以工作
var sourceData = [
{ id:1, text: "Foo" },
{ id:2, text: "Bar" },
{ id:3, text: "Baz" }
];
我已经有一段时间没有深入研究剑道的内部结构了,但是如果我没记错的话,当你将一个数组传递给新的数据源
时,它会自动将数组包装成可观察的对象
如果使用上面显示的普通数组,然后编辑表中的字段,则可以通过window.sourceData[0]。text
补充说明;由于将数据源的
id
设置为id
属性,因此如果在表中编辑该列,会发生奇怪的事情。ID应该是不可变的。例如,如果您编辑id=1的第一行,并将id更改为3
,那么剑道数据源将获取id=3的项目(第三行),并将文本从“Baz”更改为“Foo”。换句话说,Kendo通过查找其ID而不是跟踪数组中的索引来查找要更改的项。我更新了我的示例,以更全面地演示我看到的问题。如果不将源数组包装在ObservableArray中,则初始记录可以正常工作,但不会添加新记录。就剑道为您包装阵列而言,这很可能是真的,但无论它如何包装,原始数据源都不会在阵列中包含新项。关于身份证,我删除了这个专栏,因为事实证明这会分散人们对真实问题的注意力。啊,很有趣。对我来说,当我使用ObservableArray时,新建和编辑/保存工作很好,但编辑/取消会导致问题。。。有时。。。有时,如果先编辑/保存一条记录,然后再编辑/取消,则会再次生效。似乎前后矛盾。我怀疑这可能只是一个bug,您应该发送给Telerik。我已经更新了我的示例,以更全面地演示我看到的问题。如果不将源数组包装在ObservableArray中,则初始记录可以正常工作,但不会添加新记录。就剑道为您包装阵列而言,这很可能是真的,但无论它如何包装,原始数据源都不会在阵列中包含新项。关于身份证,我删除了这个专栏,因为事实证明这会分散人们对真实问题的注意力。啊,很有趣。对我来说,当我使用ObservableArray时,新建和编辑/保存工作很好,但编辑/取消会导致问题。。。有时。。。有时,如果先编辑/保存一条记录,然后再编辑/取消,则会再次生效。似乎前后矛盾。我怀疑这可能只是你应该发送给Telerik的一个bug。目前,我不确定我的使用场景是否不是预期的方式,但看起来可能是剑道UI网格的bug导致了所描述的行为。目前,我的工作是通过调用vm.grid.dataSource.data()在保存数据时从网格中检索数据;感谢我的同事提供了解决方法。目前,我不确定我的使用场景是否不是预期的方式,但似乎Kendo UI网格中存在导致所述行为的错误。目前,我的工作是通过调用vm.grid.dataSource.data()在保存数据时从网格中检索数据;感谢我的同事提供了解决办法。