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

Foi útil?

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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top