我对打字很陌生,所以请容忍我.
在我的ASP.NET MVC .NET 5应用程序中,我有以下ASP.NET文件(为了简洁起见略有编辑):
interface IMyFeature {
setupEventHandlers: () => void;
handleDurationSelectorChange: () => void;
fetchReportData: (durationId: number) => void;
}
class MyFeatureCode implements IMyFeature {
constructor() {
this.setupEventHandlers();
this.fetchReportData(0);
}
setupEventHandlers(): void {
$('#durationSelector').change(this.handleDurationSelectorChange);
}
handleDurationSelectorChange(): void {
const durationId: number = Number($(this).find('option:selected').attr("id"));
this.fetchReportData(durationId);
}
fetchReportData(durationId: number): void {
const url: string = $('#formData').data().the_url;
$.ajax({
type: 'GET',
url: url,
data: { "reportFor": durationId }
})
.done((data: any) => {
if (data.success === false) {
// Panic?
}
else {
// do something
}
})
.fail((xhr: any, status: any, error: any) => {
// log something
})
.always(() => {
});
}
}
const myFeature: IMyFeature = new MyFeatureCode();简单地总结一下它的作用..。
fetchReportData来加载初始数据;当用户更改页面上的组合框/下拉时,调用相同的函数,但这一次传递所选的数字。。
什么起作用
当页面加载时,“this.fetchReportData(0);”将被成功执行。
什么不起作用
当用户更改下拉列表时,我们在变量durationId中得到正确的数字,但是行this.fetchReportData(durationId);会导致以下错误:
HTMLSelectElement.MyFeatureCode.handleDurationSelectorChange (dailyStandup.ts:24) at HTMLSelectElement.dispatch (jquery.min.js:2) at HTMLSelectElement.v.handle (jquery.min.js:2)
那么,为什么构造函数能够将它看作一个函数,而我的事件处理程序函数却不能呢?
另一件事(更令人烦恼)。在Visual中,IDE突出显示接口和类中的“函数”名称,并表示它们是“重复标识符”。有办法阻止吗?它似乎不会影响它的构建/执行。
发布于 2021-01-08 17:54:40
插入有关javascript和this关键字的相关模因
我相信您可以通过以下两种方法之一修复此错误:
setupEventHandlers(): void {
$('#durationSelector').change(this.handleDurationSelectorChange.bind(this));
}setupEventHandlers(): void {
$('#durationSelector').change(ev => this.handleDurationSelectorChange(ev));
}https://stackoverflow.com/questions/65633919
复制相似问题