我正在使用远程数据源从Observable对象中填充列表,如下面的代码所示。 在用户为列表创建新条目时,我在可观察对象中调用一个函数。 要使用新创建的条目刷新列表,我会第二次读取第一个数据源,如下面的代码所示。 问题是,即使在第二次阅读之后,我也没有在列表中看到新添加的条目 感谢您的时间和帮助。
var viewModel = kendo.observable({
postingsText: "",
postings: new kendo.data.DataSource({
transport: {
read: {
dataType: "json",
url: "http://localhost:8080/NavXzy/rest/SecurityService/getPostings?starId=3b583bed-fd29-4280-b1f2-c8485f323563"
}
}
}),
addPosting: function(e) {
var postingContent = this.get("postingsText");
if (postingContent) {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
url: "http://localhost:8080/NavXzy/rest/SecurityService/posting",
type: "POST",
dataType: "json",
data: { userStarId: "3b583bed-fd29-4280-b1f2-c8485f323563", postingText : postingContent }
}
}
});
dataSource.read();
}
//refresh the list
this.postings.read();
}
});
kendo.bind($("#postingsDiv"), viewModel);
答案 0 :(得分:0)
这似乎是插入新记录的一种不寻常的方式。 通常,您的DataSource上会有一个“创建”传输,它指定用于添加项目的URL。
类似的东西:
postings: new kendo.data.DataSource({
transport: {
read: {
dataType: "json",
url: "http://localhost:8080/NavXzy/rest/SecurityService/getPostings?starId=3b583bed-fd29-4280-b1f2-c8485f323563"
},
create: {
url: "http://localhost:8080/NavXzy/rest/SecurityService/posting",
type: "POST",
dataType: "json",
}
}
}),
addPosting: function(e) {
var postingContent = this.get("postingsText");
if (postingContent) {
var itemToAdd = {
userStarId: "3b583bed-fd29-4280-b1f2-c8485f323563",
postingText : postingContent
};
viewModel.postings.add(itemToAdd);
}
}
然后,向DataSource添加项目的行为将使其调用transport.create.url
中指定的URL并将新项目发布到服务器。它还会引发一个change
事件,通知UI更新以显示新记录。
如果对.add()
的调用未向服务器发出最佳HTTP请求,则在调用viewModel.postings.sync();
后立即向.add()
添加呼叫。是否需要它取决于是否在DataSource上启用了autoSync
。
我的猜测是你的原始代码不起作用,因为.read()
是异步的,所以第二次读取可能是在你的第一次完成之前发生的。