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
+
0
-

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
+
0
-

Addon ajax-form je stará vykopávka. Používej nette.ajax.js, aktuálně nejlepší a funkční řešení.