Комментарии 9
<?php use yii\widgets\Pjax; ?> <?= $this->render('_profile', ['model' => $model]) ?> <?php Pjax::begin(['enablePushState' => false]); ?> <?= $this->render('_addresses', ['model' => $model]) ?> <?php Pjax::end(); ?>
Зачем столько открывающих и закрывающих тегов?
0
Эх, а в symfony/forms это из коробки идет уже пару лет… collection называется… А коль уж у вас JS много, имеет смысл вообще просто десериализовать JSON запрос в готовые сущности с уже забитыми данными и просто провалидировать.
0
Как раз наоборот, JS не много, исключение только мой маленький скрипт. Статья показывает не стандартный способ использования PJAX, по крайней мере не документированный и не обсуждаемый сообществом.
На мой взгляд, раз уж сервер генерирует шаблон, то именно он этим и должен заниматься, хуже когда добавляется JS кнопка генерирующая ноду по какому то шаблону из js строки. А раз уж мы можем так легко и без написания JS отдать это дело серверу, да еще и получая валидируемые поля, то почему нет?
Не забывайте что Yii 2,0 пока только в RC. И изменений между beta и RC было много, вполне возможно что к релизу получим еще что-нибудь.
На мой взгляд, раз уж сервер генерирует шаблон, то именно он этим и должен заниматься, хуже когда добавляется JS кнопка генерирующая ноду по какому то шаблону из js строки. А раз уж мы можем так легко и без написания JS отдать это дело серверу, да еще и получая валидируемые поля, то почему нет?
Эх, а в symfony/forms это из коробки идет уже пару лет… collection называется…
Не забывайте что Yii 2,0 пока только в RC. И изменений между beta и RC было много, вполне возможно что к релизу получим еще что-нибудь.
0
релиз в воскресенье, 12 октября.
+2
во-первых «нестандартное использование» или использование «необслуживаемых» фич влечет за собой последствия. В частности усложнение поддержки в случае передачи проекта другому разработчику или вам через год.
во-вторых подозреваю что эту задачу можно решить элегантее, если задать прототип для формы, которая будет динамически добавляться (будет воспринимать форму вашей коллекции сущностей как просто форму). Тогда можно сделать и реюзабельный JS который будет клонировать элементы формы и разруливать все это. И на сервере можно через листенеры или что-то в этом духе сделать динамическую привязку элементов формы к нашим моделям… много можно придумать без «кастылей».
ну и да, разработка Yii 2 велась больше 3-х лет по сути, и вы серьезно думаете что за месяца/неделю до релиза что-то поменяется сильно? Статус RC означает стабилизацию API. Так что для сложных форм стоит просто взять какой-то отдельный компонент и запилить интеграцию. Или реализовать свой на базе Yii. Приведенный вам кейс с динамически добавляемыми полями один из самых популярных. Отсутствие готовых решений приводит к велосипедостроению. Сделайте мир Yii лучше, реализуйте реюзабельное решение и выложите в опенсурс.
во-вторых подозреваю что эту задачу можно решить элегантее, если задать прототип для формы, которая будет динамически добавляться (будет воспринимать форму вашей коллекции сущностей как просто форму). Тогда можно сделать и реюзабельный JS который будет клонировать элементы формы и разруливать все это. И на сервере можно через листенеры или что-то в этом духе сделать динамическую привязку элементов формы к нашим моделям… много можно придумать без «кастылей».
ну и да, разработка Yii 2 велась больше 3-х лет по сути, и вы серьезно думаете что за месяца/неделю до релиза что-то поменяется сильно? Статус RC означает стабилизацию API. Так что для сложных форм стоит просто взять какой-то отдельный компонент и запилить интеграцию. Или реализовать свой на базе Yii. Приведенный вам кейс с динамически добавляемыми полями один из самых популярных. Отсутствие готовых решений приводит к велосипедостроению. Сделайте мир Yii лучше, реализуйте реюзабельное решение и выложите в опенсурс.
0
во-первых «нестандартное использование» или использование «необслуживаемых» фич влечет за собой последствия. В частности усложнение поддержки в случае передачи проекта другому разработчику или вам через год.
На мой взгляд, решение достаточно простое для поддержки.
во-вторых подозреваю что эту задачу можно решить элегантее
Пожалуйста предложите рабочий вариант, хотя бы псевдо-решение. Я писал в статье что на элегантность рецепт не тянет, но это лучше чем ничего вообще в сети.
Приведенный вам кейс с динамически добавляемыми полями один из самых популярных. Отсутствие готовых решений приводит к велосипедостроению.
Не нашел похожего кейса в сети. Более того на форумах Yii framework предлагали каким либо образом перенести инстанс формы через сессию, что, на мой взгляд не возможно, а потом рендерить дополнительное поле из отдельного view, который содержит только шаблон одного поля и все.
Сделайте мир Yii лучше, реализуйте реюзабельное решение и выложите в опенсурс.
Обязательно сделаю что-то для Yii. Я работаю в продакшн с фреймворком всего месяц, так что время будет, это лишь старт.
0
Некоторые методы в JavaScript коде ActiveForm стали частью API, что позволяет легче создавать динамичные формы с поддержкой валидации добавляемых полей на стороне клиента. К примеру, следующий JavaScript код может быть использован для валидации только что добавленного поля «address»:
а как насчет вот этого?
$('#myform').yiiActiveForm('add', {
'id': 'address',
'name': 'address',
'container': '.field-address',
'input': '#address',
'error': '.field-address .help-block'
});
а как насчет вот этого?
0
Когда я решал задачу, этого api не было.
Когда же api появился я решил попробовать добавить поле таким образом, в итоге вышло что необходимо сперва создать код для добавления поля, а уже потом использовать yiiActiveForm('add', params), что, на мой взгляд, не вписывается в идеологию — шаблонизация только на одной стороне: клиент или сервер.
И напоследок. До сих пор нет документации по JS составляющей виджета ActiveForm. Возможно, когда появится дока, я пересмотрю решение.
Когда же api появился я решил попробовать добавить поле таким образом, в итоге вышло что необходимо сперва создать код для добавления поля, а уже потом использовать yiiActiveForm('add', params), что, на мой взгляд, не вписывается в идеологию — шаблонизация только на одной стороне: клиент или сервер.
И напоследок. До сих пор нет документации по JS составляющей виджета ActiveForm. Возможно, когда появится дока, я пересмотрю решение.
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Yii 2.0: Динамическое добавление валидируемых полей формы через «пиджак»(pjax) для мульти-модельной формы