2

这个问题是我昨天在 Telerik 论坛上发布的这篇帖子的镜像。

我有一个带有 HierarchicalDataSource 的 TreeView,我的问题很简单:我可以访问 transport.read 函数中的当前 dataItem 吗?

例如,考虑以下代码:

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来自 resquest 及其在 中的可访问性dataItem,但不是在options内部read函数中。还有另一种方法吗?

更新 2

通过将模型的 id 设置为uid

{
    id: "uid"
}

该函数将接收 uid,然后您可以从 dataSource 获取它,例如dataSource.getByUid().

4

1 回答 1

3

假设在您的模型Idid定义,您应该这样做:

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

在此处查看示例:http: //jsfiddle.net/OnaBai/mE4zZ/2/

编辑:如果您需要访问完整模型,那么id您可以使用getDataSource 上的方法来获取项目。

例子:

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/

于 2014-02-25T14:53:48.090 回答