2017-07-01 28 views
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();),代碼甚至不會編譯;因爲功能「無法找到」。

任何意見,將不勝感激。

謝謝。

回答

相關問題