동작 함수 외부에서 함수를 호출하는 데 문제가 있습니다. 아래 코드에서 알 수 있듯이 selectClient
두 작업 (createCompanyAccount
및 createPrivateAccount
)을 호출하는 작업이 있습니다. 그러나 나는 항상 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.createPrivateAccount
및
this.createCompanyAccount
입니다 토미
'this.createPrivateAccount'는 메소드가 'actions' 해시가 아니라 구성 요소에 있다는 것을 의미합니다. –
this.sendAction ('createCompanyAccount', person)'을 시도 할 수 있습니다. 또는 당신은 해시 액션에서 빠져 나와 컴포넌트 안에 넣을 수 있습니다. – kumkanillam
'this.createCompanyAccount'가 함수가 아님을 확인 했습니까? 지금까지 내가'createCompanyAccount' 원인을 던질 것으로 예상되는 코드를 이해한다면'undefined'를 반환하고 정의되지 않은 것에 대해서는'then'을 호출하려고합니다. 나는'createCompanyAccount'와'createPrivateAccount'가 약속들을 반환해야한다고 생각합니다, 그렇지 않아야합니까? – jelhan