将从kendoui日历控件中选择的日期存储在全局变量

时间:2017-09-28 19:58:52

标签: javascript typescript kendo-ui

我有一个打字稿文件并使用了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.
                }

1 个答案:

答案 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(以及您提醒的)实际上并不是您的班级。

使用箭头函数会引入一个中间变量,以确保您在事件回调中定位该类。