2017-12-11 8 views
0

アクション関数からアクション関数外の関数を呼び出す際に問題があります。下のコードからわかるように、私はselectClientアクションを呼び出し、2つの関数、createCompanyAccountcreatePrivateAccountを呼び出します。しかし、私はいつもthis.createPrivateAccount is undefinedを得る。私はselfを使ってみましたが、役に立たないです。奇妙なことに、私はself.createCompanyAccountを使用しなければならないと思ったが、self.createCompanyAccount is not definedが得られた。アクション関数外のEmberコンポーネント関数

私はEmber 2.12とEmber Data 2.16.3を使用します。

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    store: Ember.inject.service(), 
    tagName: '', 

    /** 
    * Actions 
    */ 
    actions: { 
     // Select from selectList 
     selectClient(element) { 
      let self = this; 

      if (element.company) { 
       this.get('store').query('account', { 'filter' : {'orgnumber': element.orgNumber}}).then(
        (accounts) => { 
         /* Organisation exist already */ 
        }, 
        (error) => { 
         let code = Number(error.errors[0].status); 
         if (code === 404) { 
          // company does not exist, so lets create it, and an account. 
          this.createCompanyAccount(element).then(
           (account) => { 
            /* Do stuff... */ 
           } 
          ); 
         } 
        } 
       ); 
      } else { 

       this.createPrivateAccount(element).then(
        (anonUser) => { 
         /* Do stuff... */ 
        } 
       ); 

      } 
     } 
    }, 

    createCompanyAccount(company) { 
     let account = this.get('store').createRecord('account', { 
      type: 'company', 
     }); 

     // Check if postal address is set on result 
     if (typeof company.addressObject !== 'undefined') { 
      let postAddress = this.get('store').createRecord('address', { 
       address: company.addressObject.streetName, 
       zip: company.addressObject.zip, 
       postal_address: company.addressObject.postalAddress 
      }); 
      account.get('addresses').pushObject(postAddress); 
     } 

     this.get('store').createRecord('company', { 
      name: company.name, 
      org_number: Number(company.orgNumber), 
      account: account 
     }).save().then((new_company) => { 
      return new_company.get('account'); 
     }); 

    }, 

    createPrivateAccount(person) { 
     let account = this.get('store').createRecord('account', { 
      type: 'anonuser' 
     }); 

     // Check if postal address is set on result 
     if (typeof person.addressObject !== 'undefined') { 
      let postAddress = this.get('store').createRecord('address', { 
       address: person.addressObject.streetName, 
       zip: person.addressObject.zip, 
       postal_address: person.addressObject.postalAddress 
      }); 
      account.get('addresses').pushObject(postAddress); 
     } 

     this.get('store').createRecord('anonUser', { 
      first_name: person.firstName, 
      sur_name: person.surName, 
      email: person.email, 
      phone: person.phone, 
      account: account, 
     }).save().then((new_person) => { 
      return new_person.get('account'); 
     }); 
    } 

}); 

誰かが間違っているのを誰でも見ることができますか?明確にするために削除した他の機能がいくつかあります。

はあなたの問題を約this.createPrivateAccountthis.createCompanyAccount未定義されていない、 トミー

+0

'this.createPrivateAccount'は、メソッドがコンポーネント内にあり、' actions'ハッシュではないことを意味します。 –

+0

this.sendAction( 'createCompanyAccount'、person) 'を試すことができます。あなたはハッシュからアクションを外してコンポーネントの中に入れてもいいです – kumkanillam

+0

'this.createCompanyAccount'が関数ではないので、本当にスローされますか?限り、私はそれが原因 'createCompanyAccount'をスローすることを期待しているコードを理解し、' undefined'を返し、あなたは未定義で 'then'を呼び出そうとします。私は 'createCompanyAccount'と' createPrivateAccount'は約束を返すべきだと思いますが、そうではありませんか? – jelhan

答えて

0

、ありがとうございました。私はそれらの両方が実行されていると思うが、彼らはundefinedを返しますが、あなたはPromiseを期待しています。したがって、this.createPrivateAccount().thenは未定義です。

関連する問題