【问题标题】:Angular - Kendo treeview checkbox change event firing multiple timesAngular - 剑道树视图复选框更改事件多次触发
【发布时间】:2014-03-03 20:22:17
【问题描述】:

我正在尝试使用 Angular 实现复选框更改事件,但在单击复选框时看到该事件多次触发。

我为此创建了一个plnkr,请帮忙。理想情况下,它应该只触发一次。

$scope.treeOptions = {
  checkboxes: {
    checkChildren: true
  },
  dataBound: function(e) {
    $scope.attachChangeEvent(e);

  }

};

事件变更代码:

 $scope.attachChangeEvent = function(e) {

  var dataSource = e.sender.dataSource;
  // issue : change event is getting called multiple times for every click on checkbox
  dataSource.bind("change", function(e) {
    var selectedNodes = 0;

    var checkedNodes = [];

    $scope.checkedNodeIds(dataSource.view(), checkedNodes);


    for (var i = 0; i < checkedNodes.length; i++) {
      var nd = checkedNodes[i];
      if (nd.checked) {
        selectedNodes++;
      }
    }
    // check the console - this is called multiple times for one checkbox click
    console.log(selectedNodes);
  });
};

是否有另一个事件可以附加到所有复选框更新后只触发一个事件?或者也许有一种方法可以将所有这些“更改”事件分组并只触发一个?

【问题讨论】:

    标签: javascript angularjs kendo-ui kendo-treeview kendo-datasource


    【解决方案1】:

    dataBound 事件被多次触发,因为您正在处理分层数据源(每个子 DS 都会触发该事件,并且它会冒泡)。结果,您将多次绑定更改处理程序。 相反,您应该从 initTree 方法绑定更改事件; sn-p:

    var knobj = new kendo.data.HierarchicalDataSource({
        data: arrayObj
    });
    
    //setting heirarchial data to scope
    $scope.treeObj = knobj;
    $scope.attachChangeEvent();
    

    (updated demo)

    或者,您可以使用dataBound 事件并检查e.node,这显然是undefined 最后一次触发dataBound (demo):

    dataBound: function(e) {
        if (!e.node) {
            $scope.attachChangeEvent();
        }
    }
    

    【讨论】:

    • 嗨 Lars - 感谢您的回复。似乎还有一些问题 - 刷新页面正在三次调用附加事件,有时在进行一些迭代后事件会触发两次。
    • 我不确定你的意思 - 你能改变演示来说明或给出重现的步骤吗?如果您检查父级的所有子级,数据源更改事件将被触发两次 - 在这种情况下,父级将自动设置为“已检查”,从而触发第二个事件
    • 好的,我想我明白你的意思了——树视图在初始化时对数据源进行了更改,从而触发了更改事件;我为我的答案添加了另一种选择
    • 对!但是在选择时仍然存在一些问题 - 有时事件会触发两次(我添加了超时并且它工作正常) - 参考:stackoverflow.com/questions/15972838/…。无论如何谢谢你拉尔斯 - 感谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多