nefunkční signál po odeslání formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Bart
- Člen | 11
Ahoj,
mám dynamicky generované formuláře s dynamickým počtem inputů:
<?php
public function createComponentPersonResultsForm() {
$this->books = $this->book->findAll();
$form = new Nette\Application\UI\Multiplier(function ($person_id) {
$form = new Nette\Application\UI\Form;
$results = $form->addContainer("results");
foreach ($this->books as $book) {
$results->addText($book->id, $book->title)
->setType('number')
->setAttribute('class', "form-control number")
->setAttribute('max', 9999)
->setAttribute('maxlength', 4)
->setDefaultValue(0)
->addRule(Form::INTEGER, 'Musí být číslo')
->addRule(Form::RANGE, 'Musí být v rozsahu %d do %d', array(0, 9999));
}
$form->addHidden('person_id', $person_id);
$form->addSubmit('save', 'Uložit');
$form->onSuccess[] = array($this, 'saveResults');
return $form;
});
return $form;
}
public function saveResults(Form $form, $values) {
$week_id = $this->week->getOrCreateWeekId($this->week_number, $this->year);
foreach ($values->results as $book_id => $quantity) {
$this->distribution->insertResult($values->person_id, $week_id, $book_id, $quantity);
}
$this->payload->points_sum = $this->distribution->getPersonSumPoints($values->person_id, $week_id);
$this->payload->person_id = $values->person_id;
$this->flashMessage("Výsledky byly uloženy", 'success');
$this->sendPayload();
}
?>
formulář posílám ajaxově:
<?php
$.nette.ajax({
type: "POST",
url: $(this).attr("action"),
data: $(this).serialize(),
beforeSend: function() {
inputs.addClass("disabled")
.prop('disabled', true);
submit_button.val("Ukládám.");
},
success: function(payload) {
var row = $('tr#person-' + payload.person_id);
row.find("td[data-category='points']").html(payload.points_sum ? payload.points_sum : ".");
inputs.removeClass("disabled")
.prop('disabled', false);
submit_button.val("Uložit");
}
});
?>
šablona:
<?php
...
<tr n:foreach="$persons as $person" id="person-{$person->id}">
<td>{$person->name}</td>
<td data-category="points">{isset($book_points[$person->id]) ? $book_points[$person->id] : "."}</td>
<td>
{form personResultsForm-$person->id}
<table class="result-inputs">
{foreach $books as $book}
<tr><th>{label results-$book->id /}</th><td>{input results-$book->id}</td></tr>
{/foreach}
</table>
{input person_id}{input save, class => "btn btn-primary submit"}
{/form}
</td>
</tr>
...
?>
Pokud mám těch inputů okole deseti, tak vše funguje perfektně,
formulář se odesílá, data se uloží do DB, odpověd příjde. V momentě
kdy je těch inputů cca 60, tak se formulář odešle, proběhne metoda Action
a Render, ale nedojde k zavolání signálu, přestože parametr „do“ je
v POST požadavku a i dorazí na server. Nevíte čím by to mohlo být? Čím
je způsobeno, že při vyším počtu prvků formuláře se to chová takto
podivně?
Díky za odpověď.