Snippet v komponente je prijat, ale neprekresli se
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Azim
- Člen | 41
Zdravim.
Pisu komponentu, ktera po projeti magneticke karty cteckou ajaxove nacte nejaka
data z db. Zasekl jsem se hned na zacatku – skoro vse funguje jak ma,
formular se ajaxove odesle, prijde odpoved (kontroluju v firebugu – prijde
spravny a updatovany snippet) ale nic se neprekresli. Pouzivam knihovnu https://componette.org/search/?…
, neni problem nekde v ni, pripadne v tom, ze hned po odeslani formu nevracim
false? pridavam kod:
class MagnetickaKartaControl extends Control {
private $result = null;
private $em = null;
public function __construct(\Nette\ComponentModel\IContainer $parent = NULL, $name = NULL, $em = null) {
parent::__construct($parent, $name);
$this->em = $em;
}
public function render() {
$this->template->setFile(__DIR__.'/magnetickaKarta.latte');
$this->template->render();
}
public function createComponentSwipeForm() {
$form = new MyForm();
$form->addText('cislo_karty', 'Cislo karty')->setAttribute('class', 'txtCardNumber');
$form->addButton('swipeBtn', 'Nacist kartu')->setAttribute('class', 'btnSwipe');
$form->onSuccess[] = callback($this, 'swipeFormSubmitted');
if ($this->presenter->isAjax()) {
if (empty($result))
$form->addText ('res', 'nic');
else
$form->addText ('res', 'neco');
}
return $form;
}
public function swipeFormSubmitted(MyForm $form) {
if ($this->presenter->isAjax()) {
$em = $this->em;
$karta = $em->getRepository('MagnetickaKarta')->findOneBy(array('cisloKarty' => $form['cislo_karty']->getValue()));
$this->result = $karta;
$this->invalidateControl('karta');
}
}
}
sablona:
<script type="text/javascript">
function processSwipe(value) {
var parsedSwipe = parseSwipe(value);
if (parsedSwipe.CardNumber) {
$(".txtCardNumber").val(parsedSwipe.CardNumber);
// odesilani formu
$(".txtCardNumber").closest("form").ajaxSubmit();
}
$("#swipe-dialog").dialog("close");
$("body").unbind("click");
}
function parseSwipe(swipe) {
var swipeData = {};
swipeData.CardNumber = 123;
return swipeData;
}
$(function() {
$("#swipe-dialog").dialog({
autoOpen: false,
height: 140,
width: 240,
modal: true,
open: function(event, ui) {
$("#txtSwipe").val('');
$("#txtSwipe").focus();
$("#txtSwipe").keypress(function() {
if ($(this).val().length == 22) {
processSwipe($(this).val());
return false;
}
});
$("body").click(function() {
$('#txtSwipe').focus();
});
},
buttons: {
Zrušit: function() {
$(this).dialog("close");
$("body").unbind("click");
}
}
});
$(".btnSwipe").click(function() {
$("#swipe-dialog").dialog("open");
});
});
</script>
<style type="text/css">
.ui-dialog { height: 100%; font-size: 62.5%; }
</style>
{snippet karta}
{control swipeForm}
{/snippet}
<br />
<div id="swipe-dialog" style="display:none;">
<input id="txtSwipe" type="text" style="position: absolute; top: -1000px;" />
<div style="padding: 10px 0 0 10px;">
Projeďte kartu čtečkou...
</div>
</div>
- Majkl578
- Moderator | 1364
Addon ajax-form je stará vykopávka. Používej nette.ajax.js, aktuálně nejlepší a funkční řešení.