pesistentni promena nefunguje-neziska hodnotu v ajax
- vlkodlak
- Člen | 175
zdavím,
udělal jsem jednoduchy test na Ajax, A po překonání chyb v me hlavě
jsem se zasekla na nasledujicim:
jednoducha stránka s dvemy tlačitky pro increment a decrement hodnoty, akce
ajaxu probehne, ale hodnota jak si nepohne.
HomepagePresenter.php
<?php
declare(strict_types=1);
namespace App\Presenters;
use Nette;
final class HomepagePresenter extends Nette\Application\UI\Presenter
{
/** @persistent */
public $cislo;
public function handleAdd():void
{
$this->cislo=$this->cislo+1;
$this->template->mycislo = $this->cislo;
$this->redrawControl('pocitadlo');
}
public function handleRemove():void
{
$this->cislo=$this->cislo-1;
$this->template->mycislo = $this->cislo;
$this->redrawControl('pocitadlo');
}
}
default.latte
{* This is the welcome page, you can delete it *}
{block content}
<div>
<p>
cas : {time()}
</p>
<article n:snippet="pocitadlo">
cislo : {ifset $mycislo}{$mycislo}{else}neni definovano{/ifset}
</article>
<a class="ajax" n:href="add!">+ Add +</a>
::
<a class="ajax" n:href="remove!">- Remove -</a>
</div>
@layout.latte
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>{ifset title}{include title|stripHtml} | {/ifset}Nette Web</title>
</head>
<body>
<div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div>
{include content}
{block scripts}
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript" src="{$basePath}/nette.ajax.js"></script>
<script type="text/javascript" src="{$basePath}/main.js"></script>
<script src="https://nette.github.io/resources/js/3/netteForms.min.js"></script>
{/block}
</body>
</html>
- galab
- Backer | 74
Mrkni ještě na toto, jelikož máš includovanou šablonu.
https://doc.nette.org/…ication/ajax#…
- vlkodlak
- Člen | 175
obavam se, že to nebude ono, protože pokud vložim kus kodu primo do @layout.latte tak to nefunguje také
@layout.latte
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>{ifset title}{include title|stripHtml} | {/ifset}Nette Web</title>
</head>
<body>
<div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div>
<div>
<p>
cas : {time()}
</p>
<article n:snippet="pocitadlo">
cislo : {ifset $mycislo}{$mycislo}{else}neni definovano{/ifset}
</article>
<a class="ajax" n:href="add!">+ Add +</a>
::
<a class="ajax" n:href="remove!">- Remove -</a>
</div>
{ include content}
{block scripts}
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript" src="{$basePath}/nette.ajax.js"></script>
<script type="text/javascript" src="{$basePath}/main.js"></script>
<script src="https://nette.github.io/resources/js/3/netteForms.min.js"></script>
{/block}
</body>
</html>
- vlkodlak
- Člen | 175
možna ne zcela rozumim co mam hledat … tvé otázcekam se mam podivat a co uvidět … když v prohlizeči použiji f12 … v sitove komunikaci vše má 200, v ladence vidim GET http:// test / nette / AJAX / handler / www / www / ?cislo=1&do=add … ale cislo je stale beze zmeny 1
a jako typ se vypise bud script nebo xhr
Editoval vlkodlak (20. 2. 2022 22:47)
- vlkodlak
- Člen | 175
děkuji @galab -ovi za inspirativní pomoc při odladění mého příkladu níže přikládam výsledné řešení pro ty co narazí na toto vlákno
HomepagePresenter.php
declare(strict_types=1);
namespace App\Presenters;
use Nette;
final class HomepagePresenter extends Nette\Application\UI\Presenter
{
/** @persistent */
public $cislo = 0;
public function actionDefault($cislo = 0)
{
$this->cislo = $cislo;
}
public function renderDefault()
{
$this->template->cislo = $this->cislo;
}
public function handleAdd($cislo)
{
$this->cislo = $this->cislo + 1;
$this->redrawControl('pocitadlo');
}
public function handleRemove($cislo)
{
$this->cislo = $this->cislo - 1;
$this->redrawControl('pocitadlo');
}
}
@layout.latte
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>{ifset title}{include title|stripHtml} | {/ifset}Nette Web</title>
</head>
<body>
<div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div>
{include content}
{block scripts}
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript" src="{$basePath}/nette.ajax.js"></script>
<script type="text/javascript" src="{$basePath}/main.js"></script>
<script src="https://nette.github.io/resources/js/3/netteForms.min.js"></script>
{/block}
</body>
</html>
default.latte
{block content}
<div>
<p>
cas : {time()}
</p>
<article n:snippet="pocitadlo">
cislo : {ifset $cislo}{$cislo}{/ifset}
<br>
<a class="ajax" n:href="add! $cislo">+ Add +</a>
::
<a class="ajax" n:href="remove! $cislo">- Remove -</a>
</article>
</div>
a za sebe doplním, pro jiné začatečniky, důležitou drobnost
main.js
$(document).ready(function () {
$.nette.init();
})
Editoval vlkodlak (21. 2. 2022 15:57)