在transport.read函数中访问dataItem

时间:2014-02-25 14:33:50

标签: javascript jquery kendo-ui kendo-treeview kendo-datasource

这个问题是昨天我发布的来自Telerik论坛的this post镜像。

我有一个带有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;
        }
    }
});

我想访问read函数中当前扩展节点的dataItem属性。这可能吗?

我尝试过很多方法,但是这个函数的范围让我可以访问它之外的任何东西。

更新

@OnaBai建议使用 - 在我的情况下 - Value属性,给出以下模型:

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

但我希望能够访问Id以及整个dataItem的更多内容。我试图将dataItem的 - 或请求 - 属性添加到模型中,但它不起作用:

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

ParentId来自resquest,可在dataItem中访问,但options readuid内无法访问{ id: "uid" } 。还有另一种方法吗?

更新2

通过将模型的ID设置为dataSource.getByUid(),可以实现一个棘手的方法:

{{1}}

该函数将接收uid然后你可以从dataSource获取它,例如{{1}}。

1 个答案:

答案 0 :(得分:3)

假设您的模型中定义了Id id,您应该这样做:

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

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

编辑:如果您需要访问完整模型,那么可以使用id知道您可以在DataSource上使用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/