这个问题是镜子 这个帖子 在我昨天发布的 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 的 - 或 request - 属性添加到模型中,但它不起作用:

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

ParentId 来自请求及其可访问的 dataItem, ,但不在 options 里面 read 功能。还有另一种方法可以做到这一点吗?

更新2:

可以通过将模型的 id 设置为 uid:

{
    id: "uid"
}

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

有帮助吗?

解决方案

假如说 Idid 在你的模型中定义,你应该这样做:

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

请参阅此处的示例: http://jsfiddle.net/OnaBai/mE4zZ/2/

编辑:如果您需要访问完整模型,请了解 id 您可以使用 get DataSource 上用于获取项目的方法。

例子:

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