アクション関数からアクション関数外の関数を呼び出す際に問題があります。下のコードからわかるように、私はselectClient
アクションを呼び出し、2つの関数、createCompanyAccount
とcreatePrivateAccount
を呼び出します。しかし、私はいつも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.createPrivateAccount
とthis.createCompanyAccount
未定義されていない、 トミー
'this.createPrivateAccount'は、メソッドがコンポーネント内にあり、' actions'ハッシュではないことを意味します。 –
this.sendAction( 'createCompanyAccount'、person) 'を試すことができます。あなたはハッシュからアクションを外してコンポーネントの中に入れてもいいです – kumkanillam
'this.createCompanyAccount'が関数ではないので、本当にスローされますか?限り、私はそれが原因 'createCompanyAccount'をスローすることを期待しているコードを理解し、' undefined'を返し、あなたは未定義で 'then'を呼び出そうとします。私は 'createCompanyAccount'と' createPrivateAccount'は約束を返すべきだと思いますが、そうではありませんか? – jelhan