在 Transport.read 函数中访问 dataItem
-
21-12-2019 - |
题
这个问题是镜子 这个帖子 在我昨天发布的 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()
.
解决方案
假如说 Id
这 id
在你的模型中定义,你应该这样做:
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/
不隶属于 StackOverflow