这实际上是一个综合问题:
You schema
定义是:
schema: {
model: {
extappId: "ID",
fields: {
extappId: { type: "number" },
desc: { type: "string" },
deviceNo: { type: "number" },
validationKey: { type: "string" }
}
}
}
It says extappId: "ID"
... 这是什么?你想说吗extappId
is the id
那个记录?如果是这样,实际的定义应该是:
schema: {
model: {
id: "extappId",
fields: {
extappId: { type: "number" },
desc: { type: "string" },
deviceNo: { type: "number" },
validationKey: { type: "string" }
}
}
}
这里发生的事情没有被(正确)定义id
, KendoUI 预计id
实际上是id
并且由于这在期间没有被设置create
下次你sync
它试图保存它,它相当于:
datasourceAppList.add({ extappId: 9905, desc: "test", deviceNo: 5, validationKey: "CACACACA"});
datasourceAppList.add({ extappId: 9908, desc: "harvest", deviceNo: 7, validationKey: "ppppppp"});
datasourceAppList.sync();
但如果你尝试一下,你就会发现create
从未被调用。现在发生的事情是id
记录的(即extappId
) 已定义且不为 null,因此 KendoUI 认为已保存。
为了解决第二个问题,我的建议是定义schema
as:
schema: {
model: {
id: "ID",
fields: {
extappId: { type: "number" },
desc: { type: "string" },
deviceNo: { type: "number" },
validationKey: { type: "string" }
}
}
}
现在id
是一个叫做ID
和这个ID
应该创建于transport.create
(调用前不能设置add
方法)。
然后,你将其设置为create
你可以使用:
create: function(options){
// Set `ID` to kendo.guid
options.data.ID = kendo.guid();
alert(options.data.desc);
var localData = JSON.parse(localStorage.getItem("LsAppList"));
localData.push(options.data);
localStorage.setItem("LsAppList", JSON.stringify(localData)); //localStorage["LsAppList"] = JSON.stringify(localData);
options.success(localData);
},
在这里检查:http://jsfiddle.net/OnaBai/n7sNd/3/ http://jsfiddle.net/OnaBai/n7sNd/3/