这个问题是昨天我发布的来自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
read
内uid
内无法访问{
id: "uid"
}
。还有另一种方法吗?
更新2 :
通过将模型的ID设置为dataSource.getByUid()
,可以实现一个棘手的方法:
{{1}}
该函数将接收uid然后你可以从dataSource获取它,例如{{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/