Acesso dataItem dentro de transporte.função de leitura de
-
21-12-2019 - |
Pergunta
Esta pergunta é um espelho da este post no Telerik Forum que eu postei ontem.
Eu tenho um TreeView com HierarchicalDataSource e a minha pergunta é simples:Posso acessar o atual dataItem no transporte.função de leitura?
Por exemplo, 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;
}
}
});
Eu quero acessar o dataItem propriedades da atual expansão nó dentro da função de leitura.Isso é possível?
Eu já tentei de várias formas, mas o escopo dentro dessa função dá-me o acesso de nada exterior a ele.
ATUALIZAÇÃO:
@OnaBai sugestão trabalhou com - no meu caso - Value
propriedade, dado o seguinte modelo:
{
id: "Value",
hasChildren: "HasChildren"
};
Mas eu quero ser capaz de acessar mais do que apenas Id
mas toda a dataItem
.Eu tentei adicionar dataItem - ou pedir - propriedades do modelo, mas não funcionou:
{
id: "Value",
hasChildren: "HasChildren",
fields: {
ParentId: { type: "string" }
}
};
ParentId
vem do resquest e seus acessível em dataItem
, mas não em options
dentro read
função.Há outra maneira de fazer isso ?
ATUALIZAÇÃO 2:
Um caminho complicado de fazer isso pode ser conseguido através da criação do modelo de identificação para uid
:
{
id: "uid"
}
A função irá receber o uid e, em seguida, você pode obtê-lo a partir de fonte de dados com, por exemplo, dataSource.getByUid()
.
Solução
Partindo do princípio de que Id
o id
definidas no seu modelo, você deve fazer:
new kendo.data.HierarchicalDataSource({
transport: {
read: function(options) {
return "my/controller/" + options.Id;
}
}
});
Veja um exemplo aqui : http://jsfiddle.net/OnaBai/mE4zZ/2/
EDITAR:Se você precisar acessar o modelo completo, e, em seguida, conhecida a id
você pode usar get
método em que a fonte de dados para obter o item.
Exemplo:
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;
}
}
});
Modificado JSFiddle aqui http://jsfiddle.net/OnaBai/mE4zZ/3/