我是新手。我想在我的应用程序中使用猪鼻日历。因此,在选择需要调用后端服务的日期时,我将其添加为javascript。我不知道如何从jquery库中调用服务。
$('.timetable').pignoseCalendar({
select: function (date, context) {
var dt = date[0];
var myDate = new Date(dt);
var selectDt = myDate.getUTCFullYear() + '-' + (myDate.getUTCMonth() + 1) + "-" + (myDate.getDate());
this.timetableservice.getTimetabledate(selectDt).pipe(
takeUntil(this.unsubscribe),
finalize(() => {
this.loading = false;
this.cdr.detectChanges();
})
).subscribe(x => {
if (x.rstat == "S") {
this.outputData = x.rdata;
}
},
err => console.error('Timetable Observer got an error: ' + err));
}
});
答案 0 :(得分:0)
由于Java中this
引用的动态评估性质,您正在使用键pignoseCalendar
将对象传递给select
,该键的值是一个函数,并且在该函数内部,您将函数引用this.unsubscribe
传递给takeUntil
时,问题在于您正在使用select
关键字为键function
创建此函数值,因此当函数被执行后,需要在某个父范围(即全局范围)中执行,因为该函数未绑定到任何对象,并且this
引用将始终指向该函数所绑定的对象,未绑定功能时,默认情况下将为window
。要使this
指向当前的类实例,您需要使用箭头函数,而不仅仅是将this.unsubscribe
传递给takeUntil
,因为this.unsubscribe
将在不同的作用域,并且如果它在内部使用了this
,那么this
会指向其他东西,而不是您当前的类实例,除非您将其绑定到当前的类实例,否则整体修复将像这样< / p>
$('.timetable').pignoseCalendar({
select: (date, context) => { // Here
var dt = date[0];
var myDate = new Date(dt);
var selectDt = myDate.getUTCFullYear() + '-' + (myDate.getUTCMonth() + 1) + "-" + (myDate.getDate());
this.timetableservice.getTimetabledate(selectDt)
.pipe(
takeUntil(() => this.unsubscribe()), // And here
finalize(() => {
this.loading = false;
this.cdr.detectChanges();
})
)
.
.
.