I try to make a single page web app. It will contain some grids and forms. Some of the form controls and grids are based on the same datasource. Sometimes I need to get a specific item from the datasource (identified by a parameter) or sometimes I just need every available item from the datasource.
I've solved this problem by adding a parameterMap to the transport of the datasource. Now I'm able to exactly retrieve all items from the datasource, how and when I want. For code example, see rootDatasource below.
In the widgets which I'm using, like Grid, I want to call the read method of the datasource with a parameter specified to retrieve all items from the back-end which match the query 'active' == true. See code example:
And now my problem, this won' work!! I'm really confused, if I just add a reference to the datasource object without directly specifying the .read() method, it just works. (Retrieving all items, including 'active' == false though.) In another form I want to specify some other parameters, so just adding the parameters to my (PHP) back-end just doesn't work.
I've been reading the docs en forums quite extensively to find an answer, didn't find it and I find myself quite stuck right now. Any help will be much welcome.
I've solved this problem by adding a parameterMap to the transport of the datasource. Now I'm able to exactly retrieve all items from the datasource, how and when I want. For code example, see rootDatasource below.
In the widgets which I'm using, like Grid, I want to call the read method of the datasource with a parameter specified to retrieve all items from the back-end which match the query 'active' == true. See code example:
// create the grind containing the update elements
$(
"#root_grid"
).kendoGrid({
dataSource: rootDatasource.read({ params: { active:
true
} }),
columns: [{
field:
"id"
,
title:
"id"
,
width: 80,
}, {
field:
"name"
,
title:
"naam"
,
}, {
field:
"value"
,
title:
"weging"
,
width: 100,
}, {
field:
"active"
,
title:
"actief"
,
width: 100,
}],
toolbar: [{
name:
"create"
,
text:
"voeg nieuwe rij toe"
,
}, {
name:
"save"
,
text:
"opslaan"
,
}, {
name :
"cancel"
,
text:
"annuleren"
,
}],
sortable:
true
,
pageable: {
refresh:
true
,
pageSizes:
true
,
messages: i18n.grid.message
},
sortable: {
mode:
"multiple"
,
allowUnsort:
true
},
editable:
true
,
});
And now my problem, this won' work!! I'm really confused, if I just add a reference to the datasource object without directly specifying the .read() method, it just works. (Retrieving all items, including 'active' == false though.) In another form I want to specify some other parameters, so just adding the parameters to my (PHP) back-end just doesn't work.
I've been reading the docs en forums quite extensively to find an answer, didn't find it and I find myself quite stuck right now. Any help will be much welcome.
var
rootDatasource =
new
kendo.data.DataSource({
schema: {
data:
"data"
,
model: Root,
total:
function
(response) {
return
$(response.data).length;
}
},
pageSize: 10,
transport: {
read:
"/vta/root/all.json"
,
update: {
url:
"/vta/root/update.json"
,
type:
"POST"
},
create: {
url:
"/vta/root/create.json"
,
type:
"PUT"
},
parameterMap:
function
(data, operation) {
if
(operation ==
"read"
) {
if
(data.params != undefined) {
var
params =
new
Array();
for
(
var
n
in
data.params) {
params.push(n +
"="
+ data.params[n]);
}
return
params.join(
'&'
);
}
}
}
},
error:
function
(e) {
alert(e.responseText);
},
change:
function
(data) {
// console.log(data);
},
sort: {
field:
'id'
,
dir:
'asc'
}
});
var Root = kendo.data.Model.define({
id: "id",
fields: {
id: {
editable: false
},
name: {
type: "string",
validation: {
required: true
}
},
'value': {
type: "number",
},
active: {
type: "boolean",
}
},
});