Acceda a dataItem dentro de la función transport.read
-
21-12-2019 - |
Pregunta
Esta pregunta es un espejo de esta publicación en el foro de Telerik que publiqué ayer.
Tengo un TreeView con HierarchicalDataSource y mi pregunta es simple:¿Puedo acceder al elemento de datos actual en la función transport.read?
Por ejemplo, considere este código:
new kendo.data.HierarchicalDataSource({
transport: {
read: function(options) {
// Here i'll prepare my url to be called
return "my/controller/" + dataItem.Id;
}
}
});
Quiero acceder a las propiedades del elemento de datos del nodo en expansión actual dentro de la función de lectura.es posible?
Lo he intentado de muchas maneras, pero el alcance dentro de esa función no me da acceso a nada fuera de ella.
ACTUALIZAR:
La sugerencia de @OnaBai funcionó con, en mi caso, Value
propiedad, dado el siguiente modelo:
{
id: "Value",
hasChildren: "HasChildren"
};
Pero quiero poder acceder a más que solo Id
pero todo dataItem
.Intenté agregar propiedades de dataItem (o solicitud) al modelo, pero no funcionó:
{
id: "Value",
hasChildren: "HasChildren",
fields: {
ParentId: { type: "string" }
}
};
ParentId
proviene de la solicitud y es accesible en dataItem
, pero no en options
adentro read
función.¿Hay otra manera de hacer eso?
ACTUALIZACIÓN 2:
Se puede lograr una forma complicada de hacer esto estableciendo la identificación del modelo en uid
:
{
id: "uid"
}
La función recibirá el uid y luego podrá obtenerlo de dataSource con, por ejemplo. dataSource.getByUid()
.
Solución
Asumiendo que Id
el id
definido en su modelo, debe hacer:
new kendo.data.HierarchicalDataSource({
transport: {
read: function(options) {
return "my/controller/" + options.Id;
}
}
});
Vea un ejemplo aquí: http://jsfiddle.net/OnaBai/mE4zZ/2/
EDITAR:Si necesita acceder al modelo completo, conozca el id
puedes usar get
método en DataSource para obtener el artículo.
Ejemplo:
var ds = new kendo.data.HierarchicalDataSource({
transport: {
read: function(options) {
if (options.Id) {
var item = ds.get(options.Id);
// Do whatever else you need with Item
}
return "my/controller/" + options.Id;
}
}
});
JSFiddle modificado aquí http://jsfiddle.net/OnaBai/mE4zZ/3/