Replicator createOne() error
- xciza
- Člen | 194
protected function createDynamicForm() {
$form->addDynamic('users', function (Container $user) {
$user->addText('name', 'Name');
$user->addSubmit('add', 'Add next person')
->setValidationScope(FALSE)
->onClick[] = callback($this, 'MyFormAddElementClicked');
}, 1);
}
public function MyFormAddElementClicked(SubmitButton $button) {
$button->parent->createOne();
}
//sablona
{foreach $form['users']->containers as $user}
{$user['name']->control} {$user['name']->label}
{$user['add']->control}
{/foreach}
- David Matějka
- Moderator | 6445
ten button musis pridat na dynamic container, ne na vnitrni container a nemusis navesovat callback, staci:
$form['users']->addSubmit('add', 'Add next person')->addCreateOnClick();
Editoval matej21 (23. 5. 2014 13:20)
- xciza
- Člen | 194
tak jsem to upravil takto:
$form->addDynamic('users', function (Container $user) {
$user->addText('name', 'Name');
}, 1);
$form['users']->addSubmit('add', 'Add next person')->addCreateOnClick();
Ale šablonu mám upravit jak? V současném stavu mě to píše že komponenta „add“ neexistuje
- xciza
- Člen | 194
Jo díky, už to přidává další pole. Ale po kliknutí se celá stránka jakoby reloaduje (problikne) a zůstane umístěná na hlavičce (nepřesune se k novému poli). Je nějaká možnost jak to dělat bez toto probliknutí? Tak nějak jsem doufal že to v sobě má ajax a pole se přidají a překreslí bez jakýchkoli změn. Snad mě chápete :)
- David Matějka
- Moderator | 6445
Replicator resi pouze server side, client side si musis vyresit sam –
treba pomoci nette.ajax.js a snippetu.
Dokonce neni nutno provadet ajaxovy pozadavek, ale pouze v klientu upravit DOM
a ty prvky pridat, viz treba https://forum.nette.org/…cet-poloziek#…
- xciza
- Člen | 194
Tak všechno fungovalo tak jak má, než jsem na form nasadil AJAX. Momentálně to mám takto:
protected function createComponentStep2() {
$form->addDynamic('step2', function (Container $step2) {
$step2->addText();
$step2->addText();
}, 1);
$form['step2']->addSubmit('add', '+ add new')->addCreateOnClick();
$form->addSubmit('submit', "continue")->setAttribute('class', 'button');
$form->onSuccess[] = callback($this, 'step2Submitted');
}
public function MyFormAddElementClicked(SubmitButton $button) {
$button->parent->createOne();
}
public function step2Submitted(Form $form) {
//obsluha formu
if ($this->isAjax()) {
$this->invalidateControl('multistep');
$this->invalidateControl('progressbar');
$this->invalidateControl('javascripts');
}
}
//sablona
{form step2 class => [multistep, ajax]}
<fieldset>
{foreach $form['step2']->containers as $step}
<div class="input">
<p>{$step['']->label}</p>
<p>{$step['']->control}</p>
</div>
<div class="input">
<p>{$step['']->label}</p>
<p>{$step['']->control}</p>
</div>
{/foreach}
<div class="clear"></div>
<p class="add">{$form['step2']['add']->control}</p>
{input submit}
</fieldset>
{/form}
Odeslání a překreslení formuláře AJAXem proběhne v pořádku, ale nemohu přidat pomocí replikatoru další pole. Co je potřeba doupravit?