Yii2: есть ли простой способ загрузить существующую ActiveForm со значениями из Javascript? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть существующая Yii2 ActiveForm (как показано ниже) в одностраничном приложении, где я хочу загрузить новые значения в него через AJAX.Уже есть простой способ сделать это, или мне нужно сделать свою собственную функцию Javascript, чтобы сделать это?

<form>
    <input type="text" name="Conversation[cv_timestamp]">
    <input type="text" name="Conversation[cv_type]">
    <input type="text" name="Contact[ct_firstname]">
    <input type="text" name="Contact[ct_lastname]">
</form>

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Я закончил делать свою собственную функцию Javascript.Улучшения приветствуются.

 // Load ActiveForm with new model attributes via Javascript
 //
 // Form fields must have been named like this: <input name="Contact[firstname]"> <input name="Contact[lastname]">
 //
 // @param {(string|jQuery object)} formSelector - String with selector or a jQuery object
 // @param {object} models : Object where keys match the 1st level form field names and the values are the model attributes that match the 2nd level, eg.: {Contact: {firstname: 'John', lastname: 'Doe'}, }

function loadActiveForm(formSelector, models) {
    if (!(formSelector instanceof jQuery)) {
        formSelector = $(formSelector);
    }

    $.each(models, function(modelName, model) {
        $.each(model, function(attributeName, attributeValue) {
            $input = formSelector.find(':input[name="'+ modelName +'['+ attributeName +']"]');
            if ($input.length > 1) {
                if ($input.first().is(':radio')) {
                    $input.each(function() {
                        if ($(this).val() == attributeValue) {
                            $(this).prop('checked', true).click();
                            if ($(this).closest('.btn').length > 0) {
                                $(this).closest('.btn').button('toggle');
                            }
                        }
                    });
                } else {
                    alert('In loadActiveForm an input had multiple tags but they are not radio buttons.');
                }
            } else {
                $input.val(attributeValue);
            }
        })
    });
}
0 голосов
/ 22 мая 2018

Итак, если я правильно вас понимаю, вы хотите, чтобы ваши контроллеры сохраняли данные вашей модели через ajax?

Если это так, вам следует взглянуть на ActiveControllers .

По сути, у вас будет:

  • index: список моделей
  • view: вернуть сведения о модели
  • create: создатьновая модель
  • обновление: обновить существующую модель
  • удалить: удалить существующую модель
  • опции: вернуть разрешенные методы HTTP

, представленные черезразличные глаголы, чтобы использовать их в качестве API.

...