我正在尝试使用listview 将数据添加到本地json变量中。我已将数据数据包装在一个kendo数据源中,这是我的viewmodel的一部分。
问题是,到达传输中的“创建”操作时,我的本地数组已经不已更新,但我的viewmodel.dataSource.data实际上是。如何在达到传输中的创建操作时更新本地数据阵列。
这是我的代码Jsfiddle。
var data =
[{
"ID": 3,
"TopMenuId": 2,
"Title": "Cashier",
"Link": "www.fake123.com"
},
{
"ID": 4,
"TopMenuId": 2,
"Title": "Deposit",
"Link": "www.fake123.com"
}
];
var viewModel = kendo.observable({
dataSource: new kendo.data.DataSource({
transport: {
read: function (options) {
alert("Read");
options.success(data);
},
create: function (options) {
debugger;
alert("Create");
alert(data.length);
},
update: function (options) {
alert("Update");
},
destroy: function (options) {
alert("Destroy");
alert(data.length);
}
},
batch: true,
pageSize: 4,
schema: {
model: {
id: "ID",
fields: {
ID: {
editable: false,
nullable: true
},
TopMenuId: {
editable: false,
nullable: true
},
Title: {
editable: true,
validation: {
required: true
}
},
Link: {
editable: true
}
}
},
data: "",
total: function (result) {
result = result.data || result;
return result.length || 0;
}
},
}),
});
//kendo.init($("#briefOverview"));
$(document).ready(function () {
kendo.bind($("#briefOverview"), viewModel);
$(".k-add-button").click(function (e) {
var listView = $("#listsContainer").data("kendoListView");
listView.add();
e.preventDefault();
});
});
答案 0 :(得分:0)
调用传输中的create
方法来实际更新您的dataSource,无论它是本地还是远程,您都应该这样做。
所以在你的案例中考虑一下:
id
(当create
完成id
时,options.success
有一个非默认值(在您的情况下是一个不同于null的值)。} LI>
id
)返回的元素(在本地)调用ID
与您收到的相同但create
create: function (options) {
debugger;
var item = options.data.models[0];
// assign an ID, here I pick a Kendo generated UID
item.ID = kendo.guid();
data.push(item);
alert("Create with ID: " + item.ID);
alert(data.length);
options.success(item);
},
1}}填充。所以你的options.success
方法应该是:
update
并在此修改了您的JSFiddle:http://jsfiddle.net/3ADTM/1/
顺便说一句,您还应该在update: function (options) {
alert("Update");
options.success(options.data.models[0]);
},
上调用{{1}}:
{{1}}
你最后的JSFiddle:http://jsfiddle.net/3ADTM/2/