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().

¿Fue útil?

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/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top