2017-12-11 3 views
0

동작 함수 외부에서 함수를 호출하는 데 문제가 있습니다. 아래 코드에서 알 수 있듯이 selectClient 두 작업 (createCompanyAccountcreatePrivateAccount)을 호출하는 작업이 있습니다. 그러나 나는 항상 this.createPrivateAccount is undefined을 얻습니다. self을 사용해 보았지만 아무 소용이 없습니다. 이상하게도 나는 self.createCompanyAccount을 사용해야한다고 생각했지만 그 다음에 self.createCompanyAccount is not defined이 나옵니다.동작 범위 밖의 함수 구성 요소 함수

나는 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은 정의되지 않습니다.