2015-10-02 124 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',但如何禁用觀察者? –