2017-09-28 7 views
0

J'ai un fichier tapuscrit et utilise kendoDatePicker. Si je sélectionne une date et que je alerte (this.selectedDate1), je peux obtenir la date que j'ai sélectionnée. Cependant, en cliquant sur un bouton, j'appelle la méthode getInvoices() ci-dessous et essaye de récupérer la valeur selectedDate1. C'est toujours indéfini. Qu'est-ce que je fais mal ici?Stockage de la date sélectionnée à partir d'un contrôle de calendrier kendoui dans une variable globale

 selectedDate1: Date; 
     selectedDate2: Date; 

     createDatePicker = function (controlNum: number) { 
        var datePicker = $("#datePicker" + controlNum).kendoDatePicker(); 
        datePicker.data("kendoDatePicker").destroy(); 
        datePicker.empty(); 

        var datePickerControl = $("#datePicker" + controlNum).kendoDatePicker({    
         change: function (e) { 
          if (controlNum === 1) { 
           this.selectedDate1 = $("#datePicker" + controlNum).data("kendoDatePicker").value(); 
           alert(this.selectedDate1); 
          } else { 
           this.selectedDate2 = $("#datePicker" + controlNum).data("kendoDatePicker").value(); 
           alert(this.selectedDate2); 
          }      
         }    
        }).data("kendoDatePicker");    
       } 


     getInvoices() { 
       alert(this.selectedDate1); 
       // returns undefined all the time. 
       } 

Répondre

0

D'abord le correctif, l'explication ...

change: (e) => { // <-- 
    if (controlNum === 1) { 
     this.selectedDate1 = $("#datePicker" + controlNum).data("kendoDatePicker").value(); 
     alert(this.selectedDate1); 
    } else { 
     this.selectedDate2 = $("#datePicker" + controlNum).data("kendoDatePicker").value(); 
     alert(this.selectedDate2); 
    }      
}   

Chaque fois que vous travaillez avec des événements, vous perdez la portée de la variable this. Le this que vous étiez en train de mettre selectedData1 (et que vous étiez en alerte) n'était pas réellement votre classe. L'utilisation d'une fonction de flèche introduit une variable intermédiaire qui s'assurera que vous ciblez la classe dans le rappel d'événement.

+0

Votre solution fonctionne plutôt bien. Donc le (e) => est très important? – user2320476

+0

Oui - cela semble assez mineur, mais cela préserve la signification de 'this' dans cette fonction - c'est donc un changement fondamental. – Fenton