JavaScript: Как запустить функцию несколько раз с разными аргументами? - PullRequest
0 голосов
/ 03 октября 2018

Я использую среду ExtJS и запускаю один метод несколько раз с разными параметрами.

Я ищу способ сделать его более понятным, простым и понятным, и я думаю, что только ванильные Javascript-решения могли бы справиться с этим?

Я пытался собрать каждый параметр в массив и используяArray.map() также forEach() методов, но я не смог с этим справиться.

Спасибо за продвижение.

//ExtJS class:
Ext.define('MyApp.FooClass', {
    extend: 'Ext.panel.Panel',

    items: [
        MyApp.createFooCard('Func1Param1', 'Func1Param2', 'Func1Param3'),
        MyApp.createFooCard('Func2Param1', 'Func2Param2', 'Func2Param3'),
        MyApp.createFooCard('Func3Param1', 'Func3Param2', 'Func3Param3'),
    ]
});

Как вы заметите, я использую тот же метод, но разные аргументы длякаждый из них.

//And here is related factory-function:
createFooCard: (bindValue, userCls, glyph, label) => {
        return {
            itemId: bindValue,
            userCls: userCls,
            glyph: MyApp.getGlyph(glyph),
            items: {
                xtype: 'infocardfld',
                fieldLabel: label,
                bind: '{' + bindValue + ' || "0"}'
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Если этот массив Items находится в глобальной области видимости, вы можете легко добавить к нему элементы внутри функции createFooCard.Например:

// Ваш массив коллекции элементов

var items = []

// Ваша функция

function createFooCard(bindValue, userCls, glyph, label) {
    var temp = {
        itemId: bindValue,
        userCls: userCls,
        glyph: MyApp.getGlyph(glyph),
        items: {
            xtype: 'infocardfld',
            fieldLabel: label,
            bind: '{' + bindValue + ' || "0"}'
        }
    };

    items.push(temp);
}

Вы также можете легко передать массив в качестве параметра.если вы хотите сделать его более обобщенным.

0 голосов
/ 03 октября 2018

Работает с Array.prototype.map для сбора вложенных массивов и ретрансляции этих массивов с Spread syntax для запуска на заводской функции.Должно быть:

Ext.define('MyApp.FooClass', {
    extend: 'Ext.panel.Panel',

    items: [
              ['Func1Param1', 'Func1Param2', 'Func1Param3'],
              ['Func2Param1', 'Func2Param2', 'Func2Param3'],
              ['Func3Param1', 'Func3Param2', 'Func3Param3']
           ].map(args => MyApp.createFooCard(...args));
    });
...