massactions.jsを拡張する


8

新しい管理グリッドシステムを備えた新しいUIモジュールからJavaScriptを拡張する必要があります。デフォルトのUiコンポーネント拡張するとヒントが得られ、いくつかのコードを設定できました。

# 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');
        }

    });
});

ご覧のとおり、3つconsole.logありますが、defaultCallback1つは呼び出されていないため、期待どおりにメソッドを上書きしていませんが、定義が読み込まれたことは確認できます。

公平を期すために、追加した新しいアクションにカスタムコールバックを追加したいと思います。元のmassactions.jsには_getCallback、massactionアイテムのコールバックを取得しようとするがありますが(上書きしようとしているdefaultCallbackへのフォールバック)、を使用しても、そこにコールバックを追加することができませんでしたview/ui_component/sales_order_grid.xml

どんな助けでも大歓迎です。

更新1:を使用してメソッドを上書きできますmassactions.prototype.defaultCallback = function(){}。これが副次的な効果をもたらすかどうかはわからないので、質問は残しておきます。


更新:を使用してメソッドを上書きできますmassactions.prototype.defaultCallback = function。そのような場合、使用せずに何が欠けていextendますか?
Rafael Kassner、

グリッドにグリッドを修正してみてください。
Mykhailo Shatilov 2017

回答:


3

githubで回答されたようです。ここにコピー/貼り付け

'mixins'機能を試すことができます。必要なのは、次のような拡張メソッドを使用してrequireJSモジュールを作成することだけです。

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
私は同じことをしましたが、My.js:37 Uncaught TypeError:target.extendは関数ではありません。例との唯一の違いは、define(['jquery'、 'My_My / js / main']、function($、my)
zhartaunik

0

あなたが何を望んでいるかはわかりませんが、私の解決策を使うことができます。私はミックスインを使用しています。

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);
            }
        });
    };
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.