Есть ли более идиоматический подход к созданию переменных определенных типов на основе ввода?

function ajax_form(selector, obj)
{

    var form = document.querySelectorAll(selector);

    if(obj)
    {

        var before = obj.before ? obj.before : function(){return true;};

        var $success = obj.success ? obj.success: function(){return true;};

        for (var i = 0; i < form.length; i++)
        {

            var url = form[i].hasAttribute('action') ? form[i].getAttribute('action') : window.location;

            var $form = form[i];

            form[i].submit = function()
            {

                var xhttp = new XMLHttpRequest();

                xhttp.open("POST", url, true);

                var FD = new FormData($form);

                /** prevent submiting twice */
                if($form.disable === true)

                    return this;

                $form.disable = true;

                if(before() === false)

                    return;

                xhttp.addEventListener('load', function()
                {

                    $form.disable = false;

                    return $success(JSON.parse(this.response));

                });

                xhttp.send(FD);

            }
        }
    }

    return form;
}

Не проверял, как это работает. Вы также можете привязать (это), чтобы он работал как jquery ajaxForm

, используя его как:

ajax_form('form',
{
    before: function()
    {
        alert('submiting form');
        // if return false form shouldn't be submitted
    },
    success:function(data)
    {
        console.log(data)
    }
}
)[0].submit();

он возвращает узлы, чтобы вы могли сделать что-то вроде submit i выше примера

до сих пор не совершенствуется, но предполагается, что вы должны работать, вы должны добавить обработку ошибок или удалить условие отключения

0
задан Michael Betterton 3 February 2019 в 23:13
поделиться

1 ответ

Вы можете создать hashmap из «string» в «function, которая возвращает animal», но его настройка будет более многословной, чем оператор switch.

Примерно так (не проверено)

type AnimalCtor func() animal

var animalMap map[string]AnimalCtor

.....

func init() {
    animalMap["dog"] = func() animal { return &dog{} }
    animalMap["cat"] = func() animal { return &cat{} }
    animalMap["bird"] = func() animal { return &bird{} }
    .....
}

func createAnimalFromString(input string) animal {
    ctor, ok := animalMap[input]
    if ok {
        return ctor()
    } else {
        return nil
    }
}

Но это гораздо более многословно, чем оператор switch, и затемняет то, что в противном случае должно быть явным и ясным.

0
ответ дан user10753492 3 February 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: