Kendo TreeView默认选择的节点不会触发onSelect

时间:2013-08-13 15:36:56

标签: javascript kendo-ui kendo-treeview

我的php代码为树视图使用的hierarchicalDataSource创建了一个分层的json数据集。

在这个php生成函数中,我将第一个叶子设置为selected = true ...所以当树视图出现时,会自动选择第一个叶子。

问题在于,当用户单击任何叶子时,会触发一个事件(onSelect),但不会触发自动选择在创建UI时树视图出现的第一个节点。

我该如何解决这个问题?

更新: Made a Demo: http://jsbin.com/abapid/2/edit

2 个答案:

答案 0 :(得分:2)

如果您想以编程方式触发select事件,则应执行以下操作:

$("#treeview").data("kendoTreeView").trigger("select");

答案 1 :(得分:1)

为了他人的利益....并且感谢 OnaBai !...这是解决方案!

Kendo UI缺少UI SDK总是提供的许多基本功能。其中一个是“onDisplay”类型甚至在小部件被绘制后触发。这将允许应用程序对像我在其中的dataSource加载包含“selected = true”字段的节点的特定情况做出反应。

Kendo TreeView通过将节点显示为选中来做出反应,但在大多数现实场景中,应用程序也需要做出反应。这就是为什么需要在小部件初始化时调用它来检查节点是否被选中并做出相应的反应。

我们( OnaBai )发现的唯一黑客是将“DataBound”事件用作“onDisplay”类型的事件。 hic是每当父节点作为以某种方式修改的子节点时触发此事件。所以它被多次调用。

所以这是绕过这个限制的代码! http://jsbin.com/ejabul/4/edit(请注意,您必须单击“使用JS运行”以模拟页面重新加载)

 $("#treeview").kendoTreeView({
    dataSource:data,
    dataTextField: "text",
    select: onSelect,
    dataBound: function (e) {
    var uid = undefined;
    var now = this.select();
    if (now) {
        var data = this.dataItem(now);
        uid = data.uid;
        if (uid && uid !== this.old_selected) {
            alert("Bingo !");
        }
        console.log("data", data.uid);
    }
    this.old_selected = uid;
    }
}); 

OnaBai

的解释
  
      
  1. 在uid中存储所选项目的唯一ID。此ID由Kendo UI为其创建的大多数节点,项目......引入。最初我将其设置为undefined(以防万一没有选择)
  2.   
  3. “now”包含当前选定的节点(如果有)。
  4.   
  5. 如果选择了一个元素(现在!== undefined),那么我将获取所选节点的数据项,然后获取该节点的UID。
  6.   
  7. 如果有UID并且不同于上一个所选节点的UID(我存储在我刚刚在tree_view中扩展的字段中,并且我调用了old_selected),那么我会发出警报。
  8.   
  9. 最后我保存了所选节点的UID以供下次使用。
  10.         

    基本上我尝试的是控制我不会连续两次警告同一节点并控制它我将所选节点的UID从一次迭代保存到下一次迭代。