Javascript 访问选定剑道树视图节点的子节点

Javascript 访问选定剑道树视图节点的子节点,javascript,kendo-ui,telerik-mvc,kendo-treeview,Javascript,Kendo Ui,Telerik Mvc,Kendo Treeview,我有一个Ajax填充的树视图 @(Html.Kendo().TreeView() .Name("fao") .HtmlAttributes(new {@class="fixed-height" }) .DataTextField("Text") .TemplateId("treeview-item-template") .DataSource(ds => ds .Read(r => r .Action("

我有一个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")
        )
    )
)
我有一个要求,当一个动作(在控制之外触发)发生时,更新模板中每个子项隐藏的一些数据

为完整起见,模板如下所示

<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>
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);

#=项目.文本#
现在,我有了触发器的代码,它工作得很好

我有代码来更新隐藏的数据。再一次。不用担心

我搞不懂的是,如何在触发时简单地获取所选节点的所有子节点(和granchild等)节点

如果我试图在最初单击节点时找到子节点,我希望能够说一些类似于

function doSomething(e)
{
    for(n=0; n<e.node.nodes.length; n++)
    {
        doSomethingElse(e.node.nodes[n]);
    }
}
功能剂量仪(e)
{

对于(n=0;n您可以通过从DOM节点获得的模型访问子节点:

var dataItem = e.sender.dataItem(e.node);
if (dataItem.hasChildren) {
    var children = dataItem.children.data();
}
这只会让您直接得到子代,所以您必须使其递归以获得所有子代

()

好的

看起来我可以像这样找到树视图上的所有节点

<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>
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);
同样,我可以得到给定节点的所有子节点,如下所示

<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>
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);
对于任何给定的节点,我都可以得到如下数据项

<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>
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)