我正在开发一个应用程序,我们使用本地存储作为基于Kendo代码库样本的数据存储。我们目前正计划使用数据源中的函数来操作数据。你可以在下面看到我们代码的那部分内容。 我在http://jsfiddle.net/photo_tom/fL5UC/2/处有一份工作样本。
var dataSource = new kendo.data.DataSource({
transport: {
create: function (options) {
var localData = JSON.parse(localStorage["grid_data"]);
localData.push(options.data);
localStorage["grid_data"] = JSON.stringify(localData);
options.success(localData);
},
read: function (options) {
var localData = JSON.parse(localStorage["grid_data"]);
options.success(localData);
},
update: function (options) {
var localData = JSON.parse(localStorage["grid_data"]);
for (var i = 0; i < localData.length; i++) {
if (localData[i].ID == options.data.ID) {
localData[i].Value = options.data.Value;
}
}
localStorage["grid_data"] = JSON.stringify(localData);
options.success(localData);
console.log("On update");
console.log(localData);
},
destroy: function (options) {
var localData = JSON.parse(localStorage["grid_data"]);
localData.remove(options.data.ID);
localStorage["grid_data"] = JSON.stringify(localData);
options.success(localData);
}
要查看问题:
我是使用这些网格的新手,我不知道导致问题的原因。
答案 0 :(得分:1)
向网格添加新记录时,您需要将ID
字段设置为其默认值(不要让用户编辑它),并在传输的{{1}中分配其唯一值然后,函数应该只将创建的记录作为参数提供给create
。如下所示:
options.success
答案 1 :(得分:0)
我已经在下面更新了演示。
create: function (options) {
var localData = JSON.parse(localStorage["grid_data"]);
localData.push(options.data);
localStorage["grid_data"] = JSON.stringify(localData);
options.success(localData);
console.log("On create");
console.log(localData);
$("#grid").data('kendoGrid').dataSource.read();
}
答案 2 :(得分:0)
您遇到的问题是因为您将整个数据集作为参数调用options.success。对于创建和更新,您只需返回更新的对象,如options.data对象。
options.success(options.data);
请参阅更新后的示例http://jsfiddle.net/photo_tom/fL5UC/2/
无需再次调用数据源上的read,只需选择options.success更新/创建的对象,它就会正常运行。