【问题标题】:Inserting nodes in a KendoUI TreeView dynamically在 KendoUI TreeView 中动态插入节点
【发布时间】:2012-11-13 16:12:05
【问题描述】:

我有以下代码:

    var cnt = 0;
    $(document).ready(function () {
        var data = [
            {
                "id":  cnt++,
                "text":"node_" + cnt
            }
        ];
        var tree = $("#treeview").kendoTreeView({
            dataSource:kendo.observableHierarchy(data)
        }).data("kendoTreeView");

        $("#push").click(function () {
            var pos = tree.dataItem(tree.select());
            pos.items.push({id:cnt++, text:"node_" + cnt});
        });

        $("#append").click(function () {
            var pos = tree.select();
            tree.append({id:cnt++, text:"node_" + cnt}, pos);
        });

        $("#show").click(function () {
            var data = tree.dataItem(".k-item:first");
            $("#content").html(JSON.stringify(data, null, 2));
        });
    });

还有两个功能: 1. push:在树中选择一个节点后,它使用dataItem获取当前数据项并将一个额外的节点(子节点)推入其中。这应该是有效的,因为 dataSource 是一个 ObservableHierarchy 对象。 2. append:一旦在树中选择了一个节点,它就使用 append 向其中引入一个额外的节点(子节点)。这在以前版本的 KendoUI 上有效,并且可以修改树,但不应反映 DataSource 中的更改。

问题/问题是: 1.如果我使用追加树是更新(视觉上)但dataItem没有更新。 2. 如果我使用推送,那么 dataItem 是更新的,而不是树。 3. 如果我选择了一个节点,使用追加然后推送,树和模型都在视觉上更新了。

似乎我第一次引入孩子append 时更新了一些内部结构,如果我直接推送它,树就会“观察”可观察的层次结构,然后树就不会观察到可观察的层次结构。

我应该如何动态插入节点才能检查数据源并获取树的当前状态?

注意这是最新版本的 KendoUI Q2.1024。

【问题讨论】:

  • 是我还是这个在 2014.1.318 时仍然损坏?

标签: treeview kendo-ui


【解决方案1】:

好的,我在 2 天后收到了有关此问题的票证的答复。 这确实是一个BUG,已在最新版本中修复,但这些版本可供有效订阅的客户使用...

它将在下一个正式版本(大约 2013 年 3 月)中提供给社区的其他成员。因此,目前唯一的解决方案是购买商业订阅,您将可以立即访问新版本...

对所有这些商业内容有点失望,因为这是一个错误..但无论如何,我们对此无能为力.. 至少我们知道我们并不疯狂,并且在几个月内我们可以用固定版本替换我们的代码。 :P

【讨论】:

  • 对此有什么好主意吗?我可能可以将.insert 与每个 .append 一起添加到数据源,但我尚未对其进行测试..
  • 我会看一下代码,但接下来的两周我很忙,所以我不知道什么时候可以回来。
  • 我明白了,我可能会在接下来的几天里尝试一下,如果我有新的东西我会在这里发布,如果你也可以这样做,请
【解决方案2】:

目前也有点我的问题,因为 append 根本不更新数据源,而 push 更新数据源时,它只会在我第一次添加节点时这样做,之后我什至无法选择该节点,直到我保存数据源并刷新页面。(或者我收到pos.items is undifined 错误)

到目前为止,我所知道的是,也许我们可以使用将子节点添加到数据源的 push 方法,并尝试每次通过 treeview.dataSource.get(treeview.select()).load() 强制加载数据源中选定节点的子节点

根据此处的文档http://docs.kendoui.com/documentation/api/framework/node

如果我们可以get 选定的节点,我们可以强制加载它的子节点。但我至今无法让datasource.get()dataSource.view()[] 读取选定的节点..

PS 我知道这不是一个完整的答案,但也许它会有所帮助..

【讨论】:

  • 是的@CipherDarkness,我们可以尝试您提出的某种解决方法,但它不是解决方案。我仍在等待一些 KendoUI 支持人员说它是 feature 还是 bug,同时看看 SO 社区是否有一些 elegant i> 始终有效的解决方法...
  • 我明白了,让我们希望剑道支持回复..但是,如果您找到解决此问题的方法,也请在此处发布。谢谢
  • Kendo Support 回复说最新版本解决了问题,但实际上没有任何改变。到目前为止,除了实现它捕获拖放、...事件之外,没有其他解决方案
  • 我知道,我是和你一起在论坛上发帖的人,我也问过,但他们似乎一开始都没有回复我们:/
  • 关于这个问题,确实 append 不起作用,但我发现了一些不能解决问题但稍微改变它的东西。正如我在剑道论坛上所说,treeview.append 似乎有效仅当节点已经有其他子节点时。并且dataItem.push 似乎可以在数据源上工作,但除非我保存 DS 并重新加载页面,否则我无法访问创建的节点。但是我尝试了 treeview.dataItem(treeview.select()).append,这似乎可以正常工作已经有子节点和新节点的节点!但它不适用于没有子节点的旧节点......我相信这与 items 的初始化有关
猜你喜欢
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2012-02-22
  • 2015-07-01
  • 2011-02-19
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多