Вопрос

Этот вопрос является зеркалом эта почта на форуме Телерика, который я разместил вчера.

У меня есть TreeView с HierarchicalDataSource, и мой вопрос прост:Могу ли я получить доступ к текущему элементу данных в функции Transport.read?

Например, рассмотрим этот код:

new kendo.data.HierarchicalDataSource({
    transport: {
        read: function(options) {
            // Here i'll prepare my url to be called
            return "my/controller/" + dataItem.Id;
        }
    }
});

Я хочу получить доступ к свойствам dataItem текущего расширяющегося узла внутри функции чтения.Это возможно?

Я пробовал много способов, но область внутри этой функции не дает мне доступа ни к чему за ее пределами.

ОБНОВЛЯТЬ:

Предложение @OnaBai сработало - в моем случае - Value собственности, учитывая следующую модель:

{
    id: "Value",
    hasChildren: "HasChildren"
}; 

Но я хочу иметь доступ к большему, чем просто Id но весь dataItem.Я попытался добавить свойства dataItem или запроса в модель, но это не сработало:

{
    id: "Value",
    hasChildren: "HasChildren",
    fields: {
        ParentId: { type: "string" }
    }
}; 

ParentId исходит из запроса и доступен в dataItem, но не в options внутри read функция.Есть другой способ сделать это?

ОБНОВЛЕНИЕ 2:

Хитрый способ сделать это можно добиться, установив идентификатор модели на uid:

{
    id: "uid"
}

Функция получит uid, а затем вы сможете получить его из источника данных, например. dataSource.getByUid().

Это было полезно?

Решение

При условии, что Id тот id определено в вашей модели, вам следует сделать:

new kendo.data.HierarchicalDataSource({
    transport: {
        read: function(options) {
            return "my/controller/" + options.Id;
        }
    }
});

Посмотрите пример здесь: http://jsfiddle.net/OnaBai/mE4zZ/2/

РЕДАКТИРОВАТЬ:Если вам нужен доступ к полной модели, то id вы можете использовать get метод в источнике данных для получения элемента.

Пример:

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 здесь http://jsfiddle.net/OnaBai/mE4zZ/3/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top