Angularjs在kendo网格上绑定自定义kendo事件的标准方法

时间:2014-03-13 09:53:58

标签: angularjs javascript-events kendo-grid angular-kendo

我想知道是否有一个angularjs绑定kendo自定义事件的最佳做法。

我有一个带有列菜单的网格,可以隐藏或显示列。

a grid with its column menu open

每当您选中/取消选中隐藏/显示列时,都会触发kendo columnHide columnShow 事件。

在我的指令中,我有以下代码来捕获该事件。我想知道这是否是绑定这些事件的最佳方式,以及是否存在任何潜在的内存问题(例如,是否有必要解除这些事件的绑定):

angular.module('sgComponents').directive('sgGrid', [

   link: function (scope, elm, attrs, ctrls) {

      kendoGrid = elm.data('kendoGrid'); // the grid

      kendoGrid.bind('columnHide', function () { 
         console.log('HIDE COLUMN');
      });

      kendoGrid.bind('columnShow', function () {
         console.log('SHOW COLUMN');
      });
   }
]);

2 个答案:

答案 0 :(得分:1)

假设在删除网格时,kendo网格代码会删除您的侦听器,那么您应该没问题。如果kendo网格本身没有清理,你可以执行以下操作:

scope.$on('$destroy', function() {
  kendoGrid.destroyOrWhateverItsCalled();
});

当您从视图中删除指令时,Angular会触发$ destroy事件。

答案 1 :(得分:1)

从我已经完成的(在此处和其他网站上)进行的研究来判断,似乎没有标准的,建议的angularjs特定绑定自定义kendo事件的方式(以及一般的自定义事件)。我在使用jQuery的bind()的问题上面完成它的方式是stackoverflow上的其他人已经完成它的方式,所以我坚持使用它。

作为参考,此处提出了类似的问题:

Event Bindings The AngularJS Way? ('我不认为目前有一种AngularJS方式可以进行这种事件绑定。据我所知,为所有丢失的事件添加本机支持是正在进行的事情,但它尚未在任何稳定版本中发布。 ')[通过缺少事件,他指的是尚未定制指令的事件,例如ng-click,ng-blur ]

Bind events on AngularJS element directives using jQuery

AngularJS: How to listen to DOM Events?

This dude也有一些信息,但他使用jQuery on()而不是bind(),基本上是相同的东西但on()更多 最新的(见 - Best practice using BIND or ON functions in jQuery): element.on( “myEvent”,...)

正如旁注所示,对于创建自己定义并发出(或广播)然后使用回调处理的自定义事件,您可以使用$ on()。有关示例,请参阅此excellent article