У меня есть TreeList пользовательского интерфейса Kendo, где каждая строка имеет флажок. Если пользователь нажмет на этот флажок, тогда запрос перейдет на сервер и сохранит данные. К сожалению, я сделал что-то неправильно, потому что:
Что я сделал не так?
Я думаю, что проблема вокруг того, как я настроил тот элемент, который изменился. Как вы видите, я перебираю набор данных, поступающий из dataSource.data(), и свойства item.checked и item.dirty обновляются. Если я правильно понимаю документацию, тогда это изменение должно инициировать метод синхронизации. Он не вызывает синхронизацию, и это причина, по которой я вызываю ее в методе.
Другой вопрос, связанный с структурой данных, должен быть отправлен на сервер. Он основан на схеме, не так ли? Поэтому, как только я смогу добиться, чтобы запрос отправил объект на сервер, я должен создать аналогичную модель С# POCO, и я могу прочитать данные в контроллере webapi.
В документации есть метод saveRow(), но я не могу перевести этот код в угловой. Может ли кто-нибудь помочь мне в этом случае?
//this row is my problem
var treeList = $("#treeList").data("kendoTreeList");
var dataSource = new kendo.data.TreeListDataSource({
transport: {
read: {
url: configurationService.goNoGoWebApiRootUrl + 'AreaPathDependencies/Get/ChildrenMarked/' + selectedAreaPathIdFromModalService,
dataType: "json",
type: "get"
},
update:
{
url: configurationService.goNoGoWebApiRootUrl + 'AreaPathDependencies/Update/AreaPathDependencies',
dataType: "json",
type: "post"
},
parameterMap: function (options, operation) {
if (operation !== "read" && options.models) {
return { models: kendo.stringify(options.models) };
}
}
},
schema: {
model: {
id: "id",
parentId: "parentId",
fields: {
Id: { type: "number", editable: false, nullable: true },
ParentId: { type: "number", editable: false, nullable: true },
Name: { type: "string", editable: false, nullable: true },
Checked: { type: "boolean", editable: true, nullable: false }
}
}
}
});
vm.treeListOptions = {
dataSource: dataSource,
sortable: false,
editable: false,
columns: [
{
field: "checked",
title: "Selected",
template: checkBoxTemplate,
width: 32
},
{ field: "name", title: "Area Path", width: "200px", expandable: true },
{ field: "fullPath", title: "FullPath", width: "500px" },
],
save: onSave,
change: onChange,
sync: sync,
autoSync: true,
};
}
function checkboxOnclick(selectedId) {
console.log('checkboxOnclick', selectedId);
var data = vm.treeListOptions.dataSource.data();
for (var i = 0; i < data.length; i++) {
if (selectedId == data[i].id) {
data[i].set("checked", true);
//data[i].dirty = true;
}
}
vm.treeListOptions.dataSource.sync();
//console.log('flush', vm.treeListOptions.dataSource.data());
}