我有一个打字稿文件并使用了kendoDatePicker。如果我选择一个日期并且我发出警报(this.selectedDate1),我就能得到我选择的日期。 但是,在单击按钮时,我调用下面的getInvoices()方法并尝试检索selectedDate1值。它总是未定义的。 我在这里做错了什么?
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.
}
答案 0 :(得分:0)
首先是修复,然后是解释......
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);
}
}
每当您处理事件时,都会失去this
变量的范围。您this
上的selectedData1
(以及您提醒的)实际上并不是您的班级。
使用箭头函数会引入一个中间变量,以确保您在事件回调中定位该类。