Ember 动作函数之外的组件函数

Ember component function outside of action function

我在从动作函数调用动作函数外部的函数时遇到问题。从下面的代码中可以看出,我有一个 selectClient 操作调用两个函数,createCompanyAccountcreatePrivateAccount。但我总是得到一个this.createPrivateAccount is undefined。我试过使用 self,但无济于事。奇怪的是,我以为我必须使用 self.createCompanyAccount,但后来我得到了 self.createCompanyAccount is not defined

我使用 Ember 2.12 和 Ember 数据 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 未定义无关。我认为他们都被处决了,但他们 return undefined 但你期待 Promise。因此 this.createPrivateAccount().then 未定义。