Shopware.Component.override kein Zugriff auf repositoryFactory

Meine Kenntnisse in Vue sind gewiss ausbaufähig, aber ich verzweifle wirklich langsam.

Ich versuche eine Komponente zu überschreiben, in der sowohl

inject: [
        'repositoryFactory'
    ],

als auch

computed: {
        orderRepository() {
            return this.repositoryFactory.create('order');
        },
}

definiert sind.

Shopware.Component.override(‚sw-order-list‘, {

}

Egal ob per this. this.$super. this.$super(‚xxx‘). ich bekomme immer ein undefined zurück.

TypeError: undefined is not an object (evaluating 'this.orderRepository')

In der Dokumentation gibt es leider absolut keine Beispiele dazu. Hat jemand zufällig eine Ahnung wie ich auf auf die Variablen zugreifen kann?

@Moorleiche könntest du mir vielleicht kurz einen Tipp geben? Schätze du hast recht viel Erfahrung damit, was ich ggf. falsch mache. Danke.

Keine Ahnung, hätte hier ein funktionierendes Bsp-

import template from './sw-order-list.html.twig';

const {Component} = Shopware;

Component.override('sw-order-list', {
    template,

    computed: {
        paymentMethodRepository() {
            return this.repositoryFactory.create('payment_method');
        },

        orderCriteria() {
            const criteria = this.$super('orderCriteria');

            criteria.addAssociation('transactions.paymentMethod');

            return criteria;
        }
    },

    methods: {
        getOrderColumns() {
            const orderColumns = this.$super('getOrderColumns');

            orderColumns.push({
                property: 'transactions.last().paymentMethod.name',
                dataIndex: 'transactions.paymentMethod.name',
                label: 'sw-order.list.columnPaymentMethod',
                allowResize: true,
            });

            return orderColumns;
        },

        getPaymentMethod(order) {
            return 'GRATIS';
        }
    },
});
{% block sw_order_list_grid_columns %}
    <template #column-transactions.last().paymentMethod.name="{ item }">
        <sw-label appearance="pill"
                  :variant="getVariantFromPaymentState(item)">
            {{ item.transactions.last().paymentMethod.name }}
        </sw-label>
    </template>

    {% parent %}
{% endblock %}
1 Like

@Moorleiche vielen Dank für das Beispiel. Ich wollte gerade schon rausstellen, dass du paymentMethodRepository überhaupt nicht verwendest und es daher keinen Fehler werfen kann, aber ich kann tatsächlich auf die Variable zugreifen :face_holding_back_tears:

Ich ergänze jetzt deinen Block um meine Befehle, Zeile für Zeile. Ich frage mich wirklich, wo das Problem liegt.

Nochmals vielen Dank!

Ich habe bei

this.orders.forEach(function(item){
   ...
}, this);

das this am Ende vergessen. Entsprechend war this undefined :grimacing:

Unabhängig davon fällt mir gerade auf, dass der Ansatz völlig daneben ist. Man sollte mitten in der Nacht nicht mehr programmieren :joy:

Nochmals vielen Dank!