我有一个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>
现在,我有触发器的代码,并且工作得很好。
我有更新隐藏数据的代码。再次。不用担心。
我无法弄清楚的是如何简单地获取触发器触发时所选节点的所有子节点(和granchild等)节点。
如果我在最初点击节点时试图抓住孩子们的话,我希望可以说出类似......
function doSomething(e)
{
for(n=0; n<e.node.nodes.length; n++)
{
doSomethingElse(e.node.nodes[n]);
}
}
但似乎没有这样的功能。
有人有任何建议我会如何解决这个问题吗?
答案 0 :(得分:5)
您可以通过您可以从DOM节点获取的模型访问子项:
var dataItem = e.sender.dataItem(e.node);
if (dataItem.hasChildren) {
var children = dataItem.children.data();
}
这只会给你直接的孩子,所以你必须让它递归才能得到所有的后代。
(demo)
答案 1 :(得分:3)
行。
似乎我可以像这样得到TreeView上的所有节点......
var allNodes = $(".k-item");
同样,我可以像这样得到给定节点的所有子节点......
// node is the node under which we need all of the child nodes
var childNodes = $(".k-item", node);
并且,对于任何给定节点,我可以像这样得到dataItem ......
var dataItem = tree.dataItem(node);
我相信,如果已加载所选节点下的所有子节点的数据,则上述所有内容都成立。就我而言,我是从远程数据加载(使用AJAX),但我的网格定义中有.LoadOnDemand(false)
。