ActiveForm и динамически добавляемые поля
ActiveForm и динамически добавляемые поля
Допустим у меня есть ActiveForm и я хочу добавить поле динамически(например, мне нужна пакетная обработка данных). Есть какие-то примеры, как это сделать? Я знаю, что в api activeForm добавили метод add для того чтобы "оживить" добавленyые поля, чтобы для них работала валидация и прочее, но как красиво добавить новое поле? На данный момент это легко сделать с Html::beginForm(), но там нет кучи фич, которые есть у ActiveForm.
Re: ActiveForm и динамически добавляемые поля
на этом форме уже были подобные вопросы
Re: ActiveForm и динамически добавляемые поля
я пролистал темы, но не нашел ничего похожегона этом форме уже были подобные вопросы
Александр, я читал этот пост, но очень не нравится предлагаемый автором подход - создавать фейковую запись в БД, а потом выводить поле под нее. Хотелось бы чтобы это можно было сделать как в 1 версии фрейморка, через Html::activeText(), Html::error() и.т.д. - там можно было при добавлении поля послать запрос на экшн, вернуть этот хтмл, вставть в форму и все - валидация работала, поля подсвечивались и.т.д. - при этом фейковую запись создавать не обязательно было.
Во второй же версии при использовании Html::error() и Html::activeText() получаются самые базовые инпаты, без валидации, без навешанного клиентского кода - без ничего вообще, и это нормально, я понимаю почему так сделали. Но вот использовать ActiveForm со всеми наворотами и просто добавить еще один инпат через нативное API - этого очень сильно не хватает.
Re: ActiveForm и динамически добавляемые поля
Я не могу этот метод в API найти.agrail писал(а):Я знаю, что в api activeForm добавили метод add
Re: ActiveForm и динамически добавляемые поля
найдите его в коде и посмотрите описание.agrail писал(а):Я знаю, что в api activeForm добавили метод add для того чтобы "оживить" добавленyые поля
Re: ActiveForm и динамически добавляемые поля
Я видел его описание. Метод добавляет возможность использовать client-side валидацию на только что добавленном поле. Вопрос не в этом. Вопрос в том, как это поле добавить вообще. Пока я вижу только один вариант - клонировать кусок DOMа с полем, через прегреплейсы заменить необходимые поля и индексы и потом "оживить" через activeForm.add(). Хотелось бы чтобы это было как-то решено на уровне самого виджета ActiveForm
Re: ActiveForm и динамически добавляемые поля
1. Оберните форму в Pjax
2. Добавьте ссылку в контейнер Pjax, к примеру, /add-item
3. метод actionAddItem можете оформить приблизительно так (он добавит 1 незаполненное поле)
2. Добавьте ссылку в контейнер Pjax, к примеру, /add-item
3. метод actionAddItem можете оформить приблизительно так (он добавит 1 незаполненное поле)
Код: Выделить всё
public function actionAddItem()
{
$models = MyModel::find()->all();
$model = new MyModel();
$models[] = $model;
return $this->renderAjax('table-view', ['models' => $models]);
}
Re: ActiveForm и динамически добавляемые поля
Да, на хабре приведен аналогичный пример - но меня не устраивает, что в базу будут писаться пустые значения. архитектура моей базы данных не предусматривает таких ситуаций.
Re: ActiveForm и динамически добавляемые поля
Почему пустые? Вы просто добавляете пустую модель и наполняете её из формы. А сохраняете в базу уже сабмитом формы.
Re: ActiveForm и динамически добавляемые поля
Да, действительно...Эта идея уже лучше, но тоже не то что нужно. Смотрите, человек может заполнить несколько полей, потом нажать на плюс - и все, Pjax сбросит несохраненные изменения при обновлении кантейнера. Значит мы должны форсированно сохранять добавленные поля. Это не хорошо.
Re: ActiveForm и динамически добавляемые поля
agrail
не по теме вопрос, т.е. не могу тебе помочь по теме
как использовать api activeForm?
подскажи где почитать? или пример? что то не получается найти
как я понимаю использовать yii.ActiveForm.js?
Столкнулся с аналогичной проблемой viewtopic.php?f=19&t=20163.
не по теме вопрос, т.е. не могу тебе помочь по теме
как использовать api activeForm?
подскажи где почитать? или пример? что то не получается найти
как я понимаю использовать yii.ActiveForm.js?
Столкнулся с аналогичной проблемой viewtopic.php?f=19&t=20163.
Re: ActiveForm и динамически добавляемые поля
Самый простой способ.
И не забудьте во view добавлять hidden поле с id записи.
И не забудьте во view добавлять hidden поле с id записи.
Код: Выделить всё
public function actionAddItem()
{
$models = []
if(isset($_POST['MyModel'])) {
$post = Yii::$app->request->post('MyModel');
foreach($post as $index => $data) {
if(!empty($data['id'])) {
$model = MyModel::findOne(['id' => $data['id']]);
} else {
$model = new MyModel();
}
$models[] = $model;
}
}
return $this->renderAjax('table-view', ['models' => $models]);
}
Re: ActiveForm и динамически добавляемые поля
Кажется то что надо. Я попробую, спасибо!Besedin писал(а):Самый простой способ.
И не забудьте во view добавлять hidden поле с id записи.Код: Выделить всё
public function actionAddItem() { $models = [] if(isset($_POST['MyModel'])) { $post = Yii::$app->request->post('MyModel'); foreach($post as $index => $data) { if(!empty($data['id'])) { $model = MyModel::findOne(['id' => $data['id']]); } else { $model = new MyModel(); } $models[] = $model; } } return $this->renderAjax('table-view', ['models' => $models]); }
Re: ActiveForm и динамически добавляемые поля
http://habrahabr.ru/post/238447/ - вот тут есть, раздел про формы:LDN писал(а):agrail
не по теме вопрос, т.е. не могу тебе помочь по теме
как использовать api activeForm?
подскажи где почитать? или пример? что то не получается найти
как я понимаю использовать yii.ActiveForm.js?
Столкнулся с аналогичной проблемой viewtopic.php?f=19&t=20163.
Код: Выделить всё
$('#myform').yiiActiveForm('add', {
'id': 'address',
'name': 'address',
'container': '.field-address',
'input': '#address',
'error': '.field-address .help-block'
});