0
我有一个Sails.js/Waterline ORM模型。它有几个定义的属性方法。但是,我很难调用另一个属性方法;我收到属性方法“不是函数”的错误。我想用“这个”将工作:Sails.js/Waterline和TypeScript - 调用另一个属性方法
const uuidv4 = require('uuid/v4')
module.exports = {
attributes: {
cartID: {
type: "string",
defaultsTo: function() {
return uuidv4();
}
},
subTotal: {
type: "float",
defaultsTo: 0
},
shipping: {
type: "float",
defaultsTo: 0
},
discount: {
type: "float",
defaultsTo: 0
},
total: {
type: "float",
defaultsTo: 0
},
cartItems: {
collection: "cartitem",
via: "cart"
},
updateCart:() => {
this.discount = 0;
this.shipping = this.calcShipping();
this.total = this.calcTotal();
this.subTotal = this.calcSubTotal();
},
calcSubTotal:(): number => {
let total: number = 0;
for (let i: number = 0; i <= this.cartItems.length; i++) {
total += (this.cartItems[i].listing.price * this.cartItems[i].quantity);
}
return total;
},
returnTransactionJSON:() => {
return JSON.stringify({
intent: "sale",
payer: {
payment_method: "paypal"
},
redirect_urls: {
return_url: "Checkout/Confirmation",
cancel_url: "Checkout/Cancel"
},
transactions: [{
amount: {
total: this.total,
currency: "USD"
},
description: "Order from Hawthorne Acres."
}]
});
},
calcTotal:(): number => {
return this.subTotal + this.shipping - this.discount;
},
calcDiscounts:(): number => {
let discount: number = 0;
if (this.cartItems.length >= 6) {
let lowestPrice: number = this.cartItems[0].price;
for (let i: number = 0; i <= this.cartItems.length; i++) {
if (this.cartItems[i].listing.price < lowestPrice) {
lowestPrice == this.cartItems[i];
}
}
discount = (Math.floor(this.cartItems.length/6) * -lowestPrice);
}
return discount;
},
calcShipping:(): number => {
let shipping: number = 0;
switch (this.cartItems.length) {
case 1:
shipping = 3.49;
case 2:
shipping = 4.49;
case 3:
case 4:
shipping = 5.99;
case 6:
shipping = 6.49;
}
return shipping;
}
}
}
不过,我收到的时候“updateCart”被称为以下错误:
TypeError: _this.calcShipping is not a function
at child.updateCart (/home/kelly/workspace/Hawthorne-Acres/api/models/Cart.ts:108:34)
at Cart.findOne.exec (/home/kelly/workspace/Hawthorne-Acres/api/controllers/CheckoutController.js:54:22)
at wrapper (/usr/local/lib/node_modules/sails/node_modules/lodash/index.js:3592:19)
at applyInOriginalCtx (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/normaliz
e.js:421:80)
at wrappedCallback (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.j
s:324:18)
at success (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/switchback/lib/normalize.j
s:33:31)
at _switch (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/switchback/lib/factory.js:
58:28)
at returnResults (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic
.js:179:9)
at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:86:16
at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:83:7
at /usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:52:16
at Object.async.forEachOf.async.eachOf (/usr/local/lib/node_modules/sails/node_modules/waterline/node_module
s/async/lib/async.js:236:30)
at Object.async.forEach.async.each (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/as
ync/lib/async.js:209:22)
at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:436:11
at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:574:5
at /usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:52:16
at Object.async.forEachOf.async.eachOf (/usr/local/lib/node_modules/sails/node_modules/waterline/node_module
s/async/lib/async.js:236:30)
at Object.async.forEach.async.each (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/as
ync/lib/async.js:209:22)
at _buildChildOpts (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/ope
rations.js:464:9)
at _execChildOpts (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/oper
ations.js:432:8)
at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:81:10
at wrapper (/usr/local/lib/node_modules/sails/node_modules/lodash/index.js:3592:19)
如果我尝试删除“这个”关键字(例如本.shipping = calcShipping();),代码甚至不会编译;因为功能“无法找到”。
任何意见,将不胜感激。
谢谢。