【发布时间】:2017-04-28 00:08:33
【问题描述】:
我在 typescript 中创建了一些 API 帮助程序,以从 Microsoft Dynamics 2016 读取/写入数据。我需要从与 API 交互的页面中的 javascript 中调用这些帮助程序的方法。我似乎无法正确获取从 Web API 调用 Get() 方法的代码。我需要在我的$("#ExpenseButton").click 回调中放入什么代码来调用 Get() 方法?
从 Typescript 编译的 Javascript 代码
var WebAPI;
(function (WebAPI) {
class ExpenseTransaction extends WebAPI.APIBase {
constructor() {
super();
}
ConvertToEntity(data) {
let result = new Array();
for (let i = 0; i < data.length; i++) {
let newRecord = new Model.ExpenseTransaction();
newRecord.ClientID = data[i]["_ccseq_clientid_value"];
newRecord.ClientNumber = data[i]["ccseq_clientnumber"];
newRecord.EmployeeFirstName = data[i]["ccseq_employeefirstname"];
newRecord.EmployeeLastName = data[i]["ccseq_employeelastname"];
newRecord.EmployeeID = data[i]["_ccseq_employeeid_value"];
newRecord.ExpenseErrorCode = data[i]["ccseq_expenseerrorcode"];
newRecord.GeneralLedgerName = data[i]["ccseq_generalledgername"];
newRecord.GeneralLedgerNumber = data[i]["ccseq_generalledgernumber"];
newRecord.GroupCode = data[i]["ccseq_groupcode"];
newRecord.MasterCardPostedDate = data[i]["ccseq_mastercardposteddate"];
newRecord.MasterCardTransactionDate = data[i]["ccseq_mastercardtransactiondate"];
newRecord.MasterCardTransactionParentCompany = data[i]["ccseq_mastercardtransactionparentcompany"];
newRecord.NAVCompanyCode = data[i]["ccseq_navcompanycode"];
newRecord.NAVEmployeeID = data[i]["ccseq_navemployeeid"];
newRecord.NAVGeographyCode = data[i]["ccseq_navgeographycode"];
newRecord.NAVJobClassCode = data[i]["ccseq_navjobclasscode"];
newRecord.NAVServiceCode = data[i]["ccseq_navservicecode"];
newRecord.SetID = data[i]["_ccseq_setid_value"];
newRecord.TransactionAmount = data[i]["ccseq_transactionamount"];
newRecord.TransactionDate = data[i]["ccseq_transactiondate"];
newRecord.TransactionDescription = data[i]["ccseq_transactiondescription"];
newRecord.TransactionType = data[i]["ccseq_transactiontype"];
newRecord.Vendor = data[i]["ccseq_vendor"];
newRecord.StateCode = data[i]["statecode"];
result[i] = newRecord;
}
return result;
}
Get(expenses) {
if (Array.isArray(expenses)) {
if (expenses[0] instanceof Model.ExpenseTransaction) {
return null;
}
}
else {
return Promise.resolve($.ajax({
url: this.Connection,
type: "GET",
contentType: "application/json",
dataType: "json",
}));
}
}
;
Create(expenses) {
for (let i = 0; i < expenses.length; i++) {
$.ajax({
url: this.Connection,
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(expenses[i].toJSON()),
success: function (data) {
alert("Success");
},
error: function (data) {
alert("error");
}
});
}
}
;
}
WebAPI.ExpenseTransaction = ExpenseTransaction;
})(WebAPI || (WebAPI = {}));
页面的Javascript代码
(WebAPI || (WebAPI = {}));
$(document).ready(function () {
setupHandlers();
});
function setupHandlers() {
"use strict";
$("#ExpenseButton").click(function () {
// Put Code here
});
}
我已经尝试过的代码
// Error: Uncaught TypeError: WebAPI.ExpenseTransaction is not a constructor
let ex = new WebAPI.ExpenseTransaction();
// Error: Uncaught ReferenceError: ExpenseTransaction is not defined
let ex = new ExpenseTransaction();
【问题讨论】:
-
不应该只是new ExpenseTransaction(),没有WebAPI前缀吗?
-
@Yeysides - 得到
Uncaught ReferenceError: ExpenseTransaction is not defined错误 -
嗯,您是否尝试将 WebAPI 声明为模块而不是 IIFE? stackoverflow.com/questions/13495107/…
-
我选择了命名空间,因为我不想使用 RequireJS 之类的东西,但是基于 this 看起来 es6 现在原生支持模块,所以它可能值得再看看
标签: javascript typescript ecmascript-6