0

Ich habe eine TypeCtrl ES6-Klasse Winkel-Controller, die eine Kendodatagrid-Direktive verwendet und Vorlage für Grid-Konfigurationsoptionen hat, in der Vorlage für das Raster muss ich eine aufrufen Methode aus der TypeCtrl-Klasse. Ich muss ein onclick- oder ng-click-Ereignis an den Bereich innerhalb der Zeile der Vorlage anhängen. Die Funktion, die beim Klicken ausgelöst werden muss, gehört jedoch zur TypeCtrl-Klasse. Wie kann ich den Kontext von TypeCtrl innerhalb des datengebundenen Ereignisses des Kendo-Gitters erhalten. Ich sehe, dass „diese“ verweist auf das Kendo Gitter hieranclick/ng-click-Ereignis an Element im Raster datengebundener Event

Hier ist, was ich habe, bitte lassen Sie mich wissen, wie ich teh Controller-Methode innerhalb des Databound-Ereignis zugreifen können

//Grid options defined in Class TypeCTrl along with openSub method 

    class TypeCtrl{ 
     constructor() {} 
     $onInit() { 
      this.gridOptions = { 
      name: 'test', 
      dataBound: function(e) { 
       //Find the span and on click , attach the typectrl controller's opensub method 
       let grid = this 
       let item = grid.tbody.find('#testClick'); 
       let value = item.innerHTML; 
       item.on('click', this.openSub(value); 

      } 
      columns: [{ 
        field: 'subscriptionName', 
        hidden: true, 
        groupHeaderTemplate: function(dataItem) { 
         let temp; 
         let sname = dataItem.value; 
         if (sname) { 
          temp = '<span id="testClick">' + sname + '</span>'; 
         } 
         return temp; 
        }.bind(this) 
       }, { 
        field: 'name',//Todo: show icons 
        title: 'name' 
       }, { 
        field: 'version', 
        title: 'version' 
       }] 
      } 
     } 

      openSub(name) { 
       alert('thisis a box'); 
      } 
     } 

     TypeCtrl.$inject = ['$scope']; 

    angular.module('core').controller('TypeCtrl', TypeCtrl); 

    export default TypeCtrl; 

Ich sehe, dass wenn ich auf den span-tag klicke, ist der kontext davon verloren und die opensub-methode wird nicht aufgerufen. Ich musste die opensub-Methode aufrufen, wenn ich auf die Zeilenvorlage geklickt habe. Kann ich das in der dataBound-Funktion tun?

oder eine andere Möglichkeit s?

Antwort

0

Der allgemeine Ansatz besteht darin, AngularJS-App mit Komponenten zu erstellen. Wenn Sie eine Komponente erstellen, die Ihr Raster enthält, können Sie die Methode openSub() aus der Vorlage aufrufen: ng-click="$ctrl.openSub()". In diesem Fall zeigt this in Ihrer Methode auf TypeCtrl.

+0

Ja, da das Element dynamisch in der Vorlage generiert wird, erhält der Kontext nicht den Controller. Ich habe bereits versucht, "das" innerhalb der Vorlage zu haben. Wie auch immer, da angular nicht über "dieses" weiß – looneytunes