AJAX požadavek nevrací JSON se snippety
- dibalaj
- Člen | 40
Ahoj :-) měl bych prosbu, zda mi někdo neporadí. Už se do toho celkem motám.
Mám dvě třídy (dědí od \Nette\Application\UI\Control):
- TableList → generátor tabulek, má svou vlastní šablonu,
- DbTableList → obal pro generování tabulek z dat získaných z databáze
TableList má svou vlastní šablonu, kde se tabulka sestavuje. DbTableList
si v konstruktoru připojí komponentu pomocí
$this->addComponent(...)
:
/**
* Konstruktor
*
* @return void
*/
public function __construct(\Nette\Database\Connection $connection, \Nette\ComponentModel\IContainer $parent = NULL, $name = NULL)
{
parent::__construct($parent, $name);
// vnoříme do této komponenty generátor seznamů
$this->generator = new TableList($parent, $name);
$this->addComponent($this->generator, 'tablelist');
// uložíme si objekt spojení s DB
$this->db = $connection;
}
V šabloně pro DbTableList mám toto:
{snippet}
{control tablelist}
{/snippet}
Nechtějí se mi ale vykreslovat změny provedené přes AJAX. Ajaxový požadavek vrací HTML celé stránky místo JSON dat se snippety. Máte někdo nějaký nápad, proč je tomu tak?
- Vojtěch Dobeš
- Gold Partner | 1316
První otázka zní – kde voláš invalidateControl()
? Pokud
nikde, tak ani Nette nebude posílat snippety.
Druhak není moc pěkné to s addComponent
. Udělej pro to
new TableList
v dané komponentě standardní továrničku.
A nepřistupuj přes $this->generator
, ale přes
$this['tablelist']
.
- dibalaj
- Člen | 40
Díky za odpověď.
invalidateControl()
volám v handle<Signal> metodě té
komponenty DbTableList. Když si „odbinduju“ ajax na tom tlačítku, tak to
proběhne v pořádku.
Ještě se zeptám, tento JS na AJAX v Nette stačí, nebo ne?
jQuery.ajaxSetup({
cache: false,
dataType: 'json',
success: function (payload) {
console.log(payload);
if (payload.snippets) {
for (var i in payload.snippets) {
$('#' + i).html(payload.snippets[i]);
}
}
}
});
$('.ajax').live('click', function (event) {
event.preventDefault();
var a = $.get(this.href);
console.log(a);
});
Pokud si všimneš nahoře v success funkci, jak tam loguju
console.log(payload)
, tak k tomu nikdy nedojde. Pokud namapuju
funkci na error událost, tak tam se AJAX dostane.
S těmi komponentami to zkusím