Úprava hodnôt formulárových prvkov po onClick bez ajaxu

pepco2
Člen | 2
+
0
-

Ahojte,

mám taký problém, vytvoril som si formulár, kde chcem, aby po kliknuti na tlačidlo sa mi nastavili hodnoty a formulár sa mi opäť vykreslil a prípadne zase stlačím a formulár sa mi opäť prekreslí. V podstate náhrada za naťahovanie údajov pomocou ajaxu.

Problém, je v tom, že v metóde updateElementClicked() sa to nastaví ale po tom, čo sa stlačí tlačidlo
znova a vypíšem si obsah formulara pomocou dump tak zistím, že pole options je prazdne. Pri celkovom
potvrdeni odoslaní pomocou „submit“ mi to hodí chybu, že daný select box je prázdny.

Vidím problém v tom, že ukladám špatne tie hodnoty, teda asi neskoro ale neprišiel som na to, kde mám dať to ukladanie aby to fungovalo. Prípadne ukladám tie hodnoty do nejakej kópie, ktorá sa potom zahodí, ale neprišiel som na to ako to urobiť správne.

Druhá otázka je spojená s problémom v tom prvom, kedy sa tie údaje pošlú skôr ako majú a v presenteri v mete createComponentCreateOrderForm() nemôžem pridať volanie po onSuccess, vypíše to len:

Cannot send header after HTTP headers have been sent

Používam Kdyby/FormsReplicator.

Viete mi niekto poradiť, tak aby sa to ukladalo správne a po stlačení tlačidla som si naplnil selectbox a potom sa vykreslil so správnymi hodnota ?

Díki vopred.

OrderFormFactory.php:

class OrderFormFactory extends BaseFormFactory
{
...

	public function createCreateOrder()
	{
		$form = new Form;

		$form->addGroup('');
		$form->addSubmit('submit', 'Uložiť objednávku')
			->setAttribute('class', 'btn-primary')
			->onClick[] = [$this, 'createOrderSubmitted'];

		$items = $form->addDynamic('items',
			function (Container $item) {
				$form->addSelect("items", "Items")
					->setAttribute("class", "form-control")
					->setPrompt("List of items")
					->setRequired();

				$form->addSubmit("update", "update")
					->setValidationScope(false)
					->setAttribute("class", "btn-info")
					->onClick[] = [$this, "updateElementClicked"];
			}, 1
		);

		$form->addGroup('');
		$form->addSubmit('submit', 'Uložiť objednávku')
			->setAttribute('class', 'btn-primary')
			->onClick[] = [$this, 'createOrderSubmitted'];

		return UtilForm::toBootstrapForm($form);
	}

	/**
	 * Naplnenie vlozenych udajov, pripadne dependency selectbox.
	 * @param SubmitButton $button
	 */
	public function updateElementClicked(Nette\Forms\Controls\SubmitButton $button)
	{
		$button->parent->getComponent("supplier_id")->setItems(
				array(0 => "item1", 1 => "item2") );
	}

	public function createOrderSubmitted(Nette\Forms\Controls\SubmitButton $button)
	{
		// zapis do db
	}

	/**
	 * @param SubmitButton $button
	 */
	public function createOrderSubmitted(Nette\Forms\Controls\SubmitButton $button)
	{
		...
	}
}

Presenter:

<?php

namespace App\Presenters;

...

class OrderPresenter extends BasePresenter
{
	...



	public function createComponentCreateOrderForm()
	{
		$form = $this->formFactory->createCreateOrder();
		/*$form->onSuccess[] = function (Form $form) {
			$tmp = $form->getPresenter();
			$tmp->flashMessage("uspesne vytvorene");
			$tmp->redirect("this");
		};*/
		return $form;
	}
}
David Matějka
Moderator | 6445
+
0
-

ahoj, ty hodnoty do selectboxu nestaci naplnit jednou, kdyz se klikne na to tlacitko. je nutne, aby i pri dalsim odeslani tam byly ty items. koukni na https://zlml.cz/…t-select-box treba ti to pomuze :)

a k te chybe – zkontroluj si, ze nekde nemas whitespace (napriklad v nejakem souboru uzavirací ?> a za ni prazdny radek nebo treba utf8-bom)

pepco2
Člen | 2
+
0
-

David Matějka napsal(a):

ahoj, ty hodnoty do selectboxu nestaci naplnit jednou, kdyz se klikne na to tlacitko.

toto mam dokonca aj predtym ako stlacim tlacidlo submit, mam vsetko vyplnene ale ked ho stlacim len mi vypise,
ze dane pole nie je vyplnene, co aj ma (setRequired()) a vynuluju sa mi prvky, nieco tam robim spatne a asi hodne :D len som nenasiel nikde odpoved, co

je nutne, aby i pri dalsim odeslani tam byly ty items. koukni na https://zlml.cz/…t-select-box treba ti to pomuze :)

Toto som studoval ten ajax mi aj funguje, len som to nedokazal rozchodit spolu s form replicator-om, prerobil
som tie prvky aby sa generovali pomocou ajaxu ale nejak som sa zasekol a co som cital forum tak som nebol jediny

a k te chybe – zkontroluj si, ze nekde nemas whitespace (napriklad v nejakem souboru uzavirací ?> a za ni prazdny radek nebo treba utf8-bom)

no v tomto pripade ked som skusil zakomentovat obsah metody updateElementClicked(), tak to fungovalo ako presne
ako malo.