将 RequireJS 与导出 class 一起使用时,函数结果未定义
Function result undefined when using RequireJS with exported class
我正在使用 Typescript、Require 和 AMD 模块。当我调用这个函数时,它 returns 未定义。如果我在函数中记录值,它们都会正确返回。
如果我不在导出的 class 中使用 require([,它将无法编译。
已从 common.ts 文件导出 class。
export class DateHelpers {
CheckMaxDateRange(fromDate: string, toDate: string, numberOfDays: Number) {
requirejs(["moment", "alertify"], function (moment, alertify) {
moment.locale('en');
var momToDate = moment(toDate, "MM/DD/YYYY");
var momFromDate = moment(fromDate, "MM/DD/YYYY");
var dateDiff = momToDate.diff(momFromDate, 'days');
if (dateDiff < 0) {
alertify.alert("From Date must be before To Date.");
return false;
}
else if (dateDiff > numberOfDays) {
alertify.alert("Date range cannot be greater than " + numberOfDays + " days.");
return false;
}
else {
return true;
}
});
}
}
调用函数
import * as common from "../../Common/Common.js"
let dateHelpers = new common.CheckMaxDateRange();
dateHelpers.CheckMaxDateRange($('#StartDate').val(), $('#EndDate').val(), 365)
我哪里错了?我之前使用的所有导出函数都不需要任何依赖项。
我认为您的导出不是问题,因为您可以将 class 导出为:
export class X {...}
export class Y {...}
或
class X {...}
class Y {...}
export { X, Y }
我认为问题可能出在您如何导入导出的 class:
import { DateHelpers} from "./path_to_class/DateHelpers";
let dateHelpers = new DateHelpers();
在调用该方法之前检查您的 dateHelpers 变量是否未定义。
它将帮助您找出问题所在。
不要将 require
与 ES6 模块语法一起使用。您应该 import
模块的依赖项,并配置 compiler/bundler 以支持加载外部脚本(如果您想使用 require.js 库,可能通过发出 AMD 语法模块)。
此外,您不应使用没有状态且只有一个方法的 class
es。写入
import * as moment from "moment";
import * as alertify from "alertify";
export function checkMaxDateRange(fromDate: string, toDate: string, numberOfDays: Number) {
moment.locale('en');
var momToDate = moment(toDate, "MM/DD/YYYY");
var momFromDate = moment(fromDate, "MM/DD/YYYY");
var dateDiff = momToDate.diff(momFromDate, 'days');
if (dateDiff < 0) {
alertify.alert("From Date must be before To Date.");
return false;
}
else if (dateDiff > numberOfDays) {
alertify.alert("Date range cannot be greater than " + numberOfDays + " days.");
return false;
}
else {
return true;
}
}
import * as common from "../../Common/Common.js";
common.checkMaxDateRange($('#StartDate').val(), $('#EndDate').val(), 365)
我正在使用 Typescript、Require 和 AMD 模块。当我调用这个函数时,它 returns 未定义。如果我在函数中记录值,它们都会正确返回。
如果我不在导出的 class 中使用 require([,它将无法编译。
已从 common.ts 文件导出 class。
export class DateHelpers {
CheckMaxDateRange(fromDate: string, toDate: string, numberOfDays: Number) {
requirejs(["moment", "alertify"], function (moment, alertify) {
moment.locale('en');
var momToDate = moment(toDate, "MM/DD/YYYY");
var momFromDate = moment(fromDate, "MM/DD/YYYY");
var dateDiff = momToDate.diff(momFromDate, 'days');
if (dateDiff < 0) {
alertify.alert("From Date must be before To Date.");
return false;
}
else if (dateDiff > numberOfDays) {
alertify.alert("Date range cannot be greater than " + numberOfDays + " days.");
return false;
}
else {
return true;
}
});
}
}
调用函数
import * as common from "../../Common/Common.js"
let dateHelpers = new common.CheckMaxDateRange();
dateHelpers.CheckMaxDateRange($('#StartDate').val(), $('#EndDate').val(), 365)
我哪里错了?我之前使用的所有导出函数都不需要任何依赖项。
我认为您的导出不是问题,因为您可以将 class 导出为:
export class X {...}
export class Y {...}
或
class X {...}
class Y {...}
export { X, Y }
我认为问题可能出在您如何导入导出的 class:
import { DateHelpers} from "./path_to_class/DateHelpers";
let dateHelpers = new DateHelpers();
在调用该方法之前检查您的 dateHelpers 变量是否未定义。
它将帮助您找出问题所在。
不要将 require
与 ES6 模块语法一起使用。您应该 import
模块的依赖项,并配置 compiler/bundler 以支持加载外部脚本(如果您想使用 require.js 库,可能通过发出 AMD 语法模块)。
此外,您不应使用没有状态且只有一个方法的 class
es。写入
import * as moment from "moment";
import * as alertify from "alertify";
export function checkMaxDateRange(fromDate: string, toDate: string, numberOfDays: Number) {
moment.locale('en');
var momToDate = moment(toDate, "MM/DD/YYYY");
var momFromDate = moment(fromDate, "MM/DD/YYYY");
var dateDiff = momToDate.diff(momFromDate, 'days');
if (dateDiff < 0) {
alertify.alert("From Date must be before To Date.");
return false;
}
else if (dateDiff > numberOfDays) {
alertify.alert("Date range cannot be greater than " + numberOfDays + " days.");
return false;
}
else {
return true;
}
}
import * as common from "../../Common/Common.js";
common.checkMaxDateRange($('#StartDate').val(), $('#EndDate').val(), 365)