2015-10-02 88 views
1

我想关闭此观察器,因为它一直重复击中“kendoWidgetCreated”事件,并导致无限循环,我点击kendoGrid.refresh()创建并摧毁角度观察者

如何关闭它,然后再打开?

scope.$on("kendoWidgetCreated", function (ev, widget) { 
 

 
    var kendoGrid = widget.element.parent().find('.k-grid').data("kendoGrid"); 
 
    if (kendoGrid != undefined) { 
 
     kendoGrid.$angular_scope.compileTemplate(); 
 
     kendoGrid.refresh(); 
 
    } 
 

 
}); 

我想是这样的,但不能让观察者触发:

var kendoWidgetWatcher = scope.$watch("kendoWidgetCreated", refreshKendoWidgets); 

    var refreshKendoWidgets = function (ev, widget) { 

      // widget compile/refresh code here... 
    } 

建议总是赞赏...

问候, Bob

***** UPDATE **** 我最初的想法是创建一个匿名函数不工作;然而,潘卡尔的答案在下面为我工作。 这里的更新工作版本:

// setup new 'kendoWidgetWatcher' object for Kendo widget watcher, compile/refresh Kendo grids/charts 
 
var kendoWidgetWatcher; 
 
function registerWatcher() { 
 
    kendoWidgetWatcher = scope.$on("kendoWidgetCreated", refreshKendoWidgets); 
 
}    
 

 
function refreshKendoWidgets(ev, widget) { 
 

 
    var ht = widget.getSize().height; 
 
    var wt = widget.getSize().width; 
 
    
 
    var kendoGrid = widget.element.parent().find('.k-grid').data("kendoGrid"); 
 
    if (kendoGrid != undefined) { 
 
     if (kendoWidgetWatcher) { 
 
\t kendoWidgetWatcher();  // disable watch 
 
     } 
 
     kendoGrid.$angular_scope.compileTemplate(); // recompile the html tempate, then refresh kendo widget 
 
     kendoGrid.refresh(); 
 
     registerWatcher(); // re-enable 
 
    } 
 
}

回答

1

你可以很容易地通过调用观察者引用作为功能关掉你的守望者,每当你想让它重新注册。

var kendoWidgetWatcher; 

function refreshKendoWidgets(ev, widget) { 
 
    
 
    var kendoGrid = widget.element.parent().find('.k-grid').data("kendoGrid"); 
 
    if (kendoGrid != undefined) { 
 
    kendoGrid.$angular_scope.compileTemplate(); 
 
    kendoGrid.refresh();   
 
    // HOW TO DISABLE THE WATCH HERE ? 
 
    } 
 
}

function registerWatcher(){ 
    kendoWidgetWatcher = scope.$watch("kendoWidgetCreated", refreshKendoWidgets); 
} 
registerWatcher(); 

//you could call below code for re-registering the watcher 
if(kendoWidgetWatcher) 
    kendoWidgetWatcher(); //to deregister it. 
registerWatcher(); //re-register it. 
+0

感谢。我其实尝试过,但观察者不会触发。我在Chrome工具中设置了一个调试点,但就好像手表没有注册一样。在我的语法中的东西? –

+0

@bob你可以尝试建议的更新 –

+0

我添加了函数'refreshKendoWidgets',但如何禁用观察者? –