Я не могу понять, какой ответ JSON от моего сервера должен быть предоставлен этой настройке для Kendo-UI Grid Control & Источник данных при сохранении проверок моей модели.
Вот мой код ниже для сетки.
<div id="grid"></div>
<script>
var crudServiceBaseUrl = "/api",
dataSource = new kendo.data.DataSource({
transport: {
read: {
url: crudServiceBaseUrl + "/companies",
dataType: "json",
type: "POST"},
update: {
url: crudServiceBaseUrl + "/companies/update",
dataType: "json",
type: "POST"},
destroy: {
url: crudServiceBaseUrl + "/companies/destroy",
dataType: "json",
type: "POST"},
create: {
url: crudServiceBaseUrl + "/companies/create",
dataType: "json",
type: "POST"},
parameterMap: function(options, operation) {
if (operation !== "read" && options.models) {
return {models: kendo.stringify(options.models)};
}
}
},
error: function (e) {
/* the e event argument will represent the following object:
{
errorThrown: "Unauthorized",
sender: {... the Kendo UI DataSource instance ...}
status: "error"xhr: {... the Ajax request object ...}
}
*/
//alert("Status: " + e.status + "; Error message: " + e.errorThrown);
console.log("Status: " + e.status + "; Error message: " + e.errorThrown);
},
autoSync: true,
serverPaging: true,
serverFiltering: true,
serverSorting: true,
pageSize: 20,
selectable: "multiple cell",
allowCopy: true,
columnResizeHandleWidth: 6,
schema: {
total: "itemCount",
//data: "items",
model: {
id: "CompanyID",
fields: {
CompanyID: { editable: false, nullable: true },
Name: { validation: { required: true } },
Phone: { type: "string" },
Email: { type: "string" }
}
}
}
});
$("#grid").kendoGrid({
dataSource: dataSource,
height: 550,
groupable: true,
sortable: {
mode: "multiple",
allowUnsort: true
},
toolbar: ["create"],
pageable: {
refresh: true,
pageSizes: true,
buttonCount: 5
},
reorderable: true,
resizable: true,
columnMenu: true,
filterable: true,
columns: [
{ field: "name", title: "Company Name" },
{ field: "phone", title:"Phone" },
{ field: "email", title:"Email" },
{ command: ["edit", "destroy"], title: "Operations", width: "240px" }
],
editable: "popup"});
</script><div id="grid"></div>
<script>
var crudServiceBaseUrl = "/api",
dataSource = new kendo.data.DataSource({
transport: {
read: {
url: crudServiceBaseUrl + "/companies",
dataType: "json",
type: "POST"},
update: {
url: crudServiceBaseUrl + "/companies/update",
dataType: "json",
type: "POST"},
destroy: {
url: crudServiceBaseUrl + "/companies/destroy",
dataType: "json",
type: "POST"},
create: {
url: crudServiceBaseUrl + "/companies/create",
dataType: "json",
type: "POST"},
parameterMap: function(options, operation) {
if (operation !== "read" && options.models) {
return {models: kendo.stringify(options.models)};
}
}
},
error: function (e) {
/* the e event argument will represent the following object:
{
errorThrown: "Unauthorized",
sender: {... the Kendo UI DataSource instance ...}
status: "error"xhr: {... the Ajax request object ...}
}
*/
//alert("Status: " + e.status + "; Error message: " + e.errorThrown);
console.log("Status: " + e.status + "; Error message: " + e.errorThrown);
},
autoSync: true,
serverPaging: true,
serverFiltering: true,
serverSorting: true,
pageSize: 20,
selectable: "multiple cell",
allowCopy: true,
columnResizeHandleWidth: 6,
schema: {
total: "itemCount",
//data: "items",
model: {
id: "CompanyID",
fields: {
CompanyID: { editable: false, nullable: true },
Name: { validation: { required: true } },
Phone: { type: "string" },
Email: { type: "string" }
}
}
}
});
$("#grid").kendoGrid({
dataSource: dataSource,
height: 550,
groupable: true,
sortable: {
mode: "multiple",
allowUnsort: true
},
toolbar: ["create"],
pageable: {
refresh: true,
pageSizes: true,
buttonCount: 5
},
reorderable: true,
resizable: true,
columnMenu: true,
filterable: true,
columns: [
{ field: "name", title: "Company Name" },
{ field: "phone", title:"Phone" },
{ field: "email", title:"Email" },
{ command: ["edit", "destroy"], title: "Operations", width: "240px" }
],
editable: "popup"});
</script>
В коде вы заметите, что я закомментировал //data: "items"
в схеме, если я раскомментирую ее, то таблица Kendo-UI Grid заполняется данными … однако, я думаю, что я делаю это неправильно, потому что тогда правила проверки, похоже, не работают с данными.
Например, я могу сказать, потому что я использую редактирование типа «всплывающее» на моей сетке, и я не вижу требуемой работы, и если я изменяю один из типов модели на логическое или число, я не вижу флажок появляются или селектор номера.
Как мой формат JSON должен выглядеть для схемы, подобной представленной?
Мой текущий ответ JSON выглядит следующим образом. У меня есть itemCount, потому что я делаю serverPaging, serverFiltering и serverSorting.
{"itemCount":"7","items":[{"name":"Joe","phone":"(714)333-8650","email":"[email protected]"},{"name":"Rachel","phone":"(562)810-4382","email":"[email protected]"},{"name":"John","phone":"(562)810-4382","email":"[email protected]"},{"name":"Richard","phone":"(562)810-4382","email":"[email protected]"},{"name":"Sister","phone":"(562)810-4382","email":"[email protected]"},{"name":"Brother","phone":"(562)810-4382","email":"[email protected]"},{"name":"Sibling","phone":"(562)810-4382","email":"[email protected]"}]}
Ладно, похоже, что я был просто слепым, оказалось, что он чувствителен к регистру … проверка начала работать, как только я изменил свою схему на следующую. имя, телефон и адрес электронной почты в json строчные, поэтому урок заключается в том, чтобы держать его строчным в определении схемы, даже если ваш ответ json именно такой.
schema: {
total: "itemCount",
data: "items",
model: {
id: "id",
fields: {
id: { editable: false, nullable: true },
name: { validation: { required: true } },
phone: { type: "string" },
email: { type: "string" }
}
}
}
Других решений пока нет …