访问选定 Kendo TreeView 节点的 Child 节点
Accessing the Child Nodes of a Selected Kendo TreeView Node
我有一个 Ajax 填充的树视图....
@(Html.Kendo().TreeView()
.Name("fao")
.HtmlAttributes(new {@class="fixed-height" })
.DataTextField("Text")
.TemplateId("treeview-item-template")
.DataSource(ds => ds
.Read(r => r
.Action("_ModuleData", "Home")
)
.Model(m => m
.Children("Items")
.HasChildren("HasChildren")
)
)
)
我需要更新一些隐藏在每个 child 项目中的数据 - 在模板中 - 当一个动作(在控制之外触发)发生时。
为了完整起见,模板看起来像这样......
<script id="treeview-item-template" type="text/kendo-ui-template">
#= item.Text #<input type='hidden' class='hidden-data' data-fal='#= item.Fal#' data-uid='#=item.uid#'/>
</script>
现在,我有了触发器的代码并且工作正常。
我有更新隐藏数据的代码。再次。别担心。
我想不通的是如何简单地获取触发器触发时所选节点的所有 child(和 granchild 等)节点。
如果我在最初单击节点时试图到达 children,我有点希望能够说出类似...
function doSomething(e)
{
for(n=0; n<e.node.nodes.length; n++)
{
doSomethingElse(e.node.nodes[n]);
}
}
但是好像没有这样的功能。
有人对我如何解决这个问题有什么建议吗?
您可以通过从 DOM 节点获得的模型访问子节点:
var dataItem = e.sender.dataItem(e.node);
if (dataItem.hasChildren) {
var children = dataItem.children.data();
}
这只会让您直接获得子代,因此您必须使其递归才能获得所有后代。
(demo)
好的。
看来我可以像这样获取 TreeView 上的所有节点...
var allNodes = $(".k-item");
同样,我可以像这样获取给定节点的所有子节点...
// node is the node under which we need all of the child nodes
var childNodes = $(".k-item", node);
并且,对于 任何 给定节点,我可以像这样获取数据项...
var dataItem = tree.dataItem(node);
我相信只有在选定节点下的所有子节点的数据都已加载时,以上所有内容才成立。就我而言,我正在从远程数据加载(使用 AJAX),但我的网格定义中有 .LoadOnDemand(false)
。
我有一个 Ajax 填充的树视图....
@(Html.Kendo().TreeView()
.Name("fao")
.HtmlAttributes(new {@class="fixed-height" })
.DataTextField("Text")
.TemplateId("treeview-item-template")
.DataSource(ds => ds
.Read(r => r
.Action("_ModuleData", "Home")
)
.Model(m => m
.Children("Items")
.HasChildren("HasChildren")
)
)
)
我需要更新一些隐藏在每个 child 项目中的数据 - 在模板中 - 当一个动作(在控制之外触发)发生时。
为了完整起见,模板看起来像这样......
<script id="treeview-item-template" type="text/kendo-ui-template">
#= item.Text #<input type='hidden' class='hidden-data' data-fal='#= item.Fal#' data-uid='#=item.uid#'/>
</script>
现在,我有了触发器的代码并且工作正常。
我有更新隐藏数据的代码。再次。别担心。
我想不通的是如何简单地获取触发器触发时所选节点的所有 child(和 granchild 等)节点。
如果我在最初单击节点时试图到达 children,我有点希望能够说出类似...
function doSomething(e)
{
for(n=0; n<e.node.nodes.length; n++)
{
doSomethingElse(e.node.nodes[n]);
}
}
但是好像没有这样的功能。
有人对我如何解决这个问题有什么建议吗?
您可以通过从 DOM 节点获得的模型访问子节点:
var dataItem = e.sender.dataItem(e.node);
if (dataItem.hasChildren) {
var children = dataItem.children.data();
}
这只会让您直接获得子代,因此您必须使其递归才能获得所有后代。
(demo)
好的。
看来我可以像这样获取 TreeView 上的所有节点...
var allNodes = $(".k-item");
同样,我可以像这样获取给定节点的所有子节点...
// node is the node under which we need all of the child nodes
var childNodes = $(".k-item", node);
并且,对于 任何 给定节点,我可以像这样获取数据项...
var dataItem = tree.dataItem(node);
我相信只有在选定节点下的所有子节点的数据都已加载时,以上所有内容才成立。就我而言,我正在从远程数据加载(使用 AJAX),但我的网格定义中有 .LoadOnDemand(false)
。