Massactions.js erweitern


8

Ich muss ein Javascript aus dem neuen UI-Modul erweitern, das das neue Admin-Grid-System enthält. Erweitern Sie eine Standard-UI-Komponente. Geben Sie mir einen Hinweis, und ich konnte Code einrichten:

# file: app/code/My/Module/view/adminhtml/web/js/gid/massactions.js
console.log('new massactions.js');
define([
    'Magento_Ui/js/grid/massactions'
], function (massactions) {
    console.log('before extend');
    return massactions.extend({

        defaultCallback: function (action, data) {
            console.log('custom callback');
        }

    });
});

Wie Sie sehen können, habe ich drei console.log, aber die defaultCallbackeine wird nicht aufgerufen, sodass die Methode nicht wie erwartet überschrieben wird, aber ich kann sicher sein, dass die Definition geladen wurde.

Um fair zu sein, möchte ich einer neuen Aktion, die ich hinzugefügt habe, einen benutzerdefinierten Rückruf hinzufügen. Im Original massactions.jshaben wir einen _getCallback, der versucht, einen Rückruf für ein Massaktionselement zu erhalten (Fallback auf defaultCallback, den ich überschreiben möchte), aber ich konnte dort keinen Rückruf hinzufügen, selbst wenn view/ui_component/sales_order_grid.xml.

Jede Hilfe wird sehr geschätzt.

Update 1 : Ich kann die Methode mit überschreiben massactions.prototype.defaultCallback = function(){}. Ich bin mir nicht sicher, ob dies einen Nebeneffekt hat, daher lasse ich die Frage offen.


Update: Ich kann die Methode mit überschreiben massactions.prototype.defaultCallback = function. Was fehlt mir in diesem Fall ohne Verwendung extend?
Rafael Kassner

Versuchen Sie, gid am Gitter zu befestigen.
Mykhailo Shatilov

Antworten:


3

Sieht aus wie auf Github beantwortet . Kopie / Vergangenheit hier

Sie können die 'Mixins'-Funktion ausprobieren. Sie müssen lediglich das requireJS-Modul mit einer erweiterten Methode wie der folgenden erstellen:

default_mixin.js:

define(function () {
    'use strict';

    var mixin = {

        methodToExtend: function () {
            //...
        }
    };

    return function (target) { // target == Result that Magento_Ui/.../default returns.
        return target.extend(mixin); // new result that all other modules receive 
    };
});

requirejs-config.js:

config: {
    mixins: {
        'My_Module/js/payment/default': {  // Target module
            'My_Module/js/payment/default_mixin': true  // Extender module
        }
    }
}

1
Ich habe das gleiche getan, aber My.js: 37 Uncaught TypeError: target.extend ist keine Funktion . Der einzige Unterschied zum Beispiel ist das Hinzufügen von define (['jquery', 'My_My / js / main'], function ($, my)
zhartaunik

0

Ich bin nicht sicher, was Sie wollen, aber Sie können meine Lösung verwenden. Ich benutze Mixins.

define([
    //'Magento_Ui/js/grid/massactions'
], function (/*massactions*/) {
    'use strict';

    return function (target) {
        return target.extend({
            applyAction: function (actionIndex) {
                console.log('my version');
                // call parent
                //return this._super(actionIndex);
            }
        });
    };
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.