AJAXová control, signál funguje, ale nepřekreslí se

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Petr Daňa
Člen | 109
+
0
-

Ahoj, už nevím co s tím, tak snad budete vědět někdo jiný. Mám control (bookmarks), který vkládám přímo do layout šablony. Tato controla přijímá signály (přidávání a odebírání prvků). Vše je řešené AJAXovým voláním. Signály se normálně zpracují, ale komponenta se nepřekreslí. Když refresnu celou stránku, tj. controla se načte normálně, vše se vykreslí jak má. Už jsem zkusil kde co, prolezl jsem fórum, zkusil jsem implementaci podle příkladu Fifteen a pořád nic. V čem může být problém – pominu-li chybu mezi klávesnicí a židlí? Díky předem za nakopnutí.

výcuc z @layout.html

<?php
		{foreach $flashes as $flash}
			<div class="{if $flash->type == 'error'}block-error-1{else}block-info-1{/if}">
				<p>{$flash->message}</p>
			</div>
		{/foreach}

		{* HLAVNI OBSAH [zacatek] *}
		@{include #content}
		{* HLAVNI OBSAH [konec] *}

		@{widget bookmarks}
?>

výcuc z BasePresenteru:

<?php
	public function createComponentBookmarks($name)
	{
		$bookmarks =  new Bookmarks();
		$bookmarks->invalidateControl();  // toto jsem puvodne tady nevolal, az v controle
		return $bookmarks;
	}
?>

výcuc z Bookmarks (controla):

<?php
	public function __construct(IComponentContainer $parent = NULL, $name = NULL)
	{
		parent::__construct($parent, $name);

		...
	}

	public function handleAddBookmark($id)
	{
		$id = intval($id);
		if (!empty($id))
		{
			$this->addItem($id);
		}

		if (NEnvironment::getHttpRequest()->isAjax())
		{
			$this->invalidateControl();
		}
	}

	public function render($orientation = 'horizontal')
	{
		...

		$template = $this->template;
		$template->setFile(APP_DIR . '/templates/controls/Bookmarks/horizontal.phtml');
		$template->items = $items;
		$template->render();
	}
?>

výcuc z horizontal.phtml:

<?php
{snippet}
<div>
  HORIZONTAL BOOKMARKS
  {foreach $items as $item}
		<div style="margin:10px;float:left">
			<a href="{plink Image:detail, 'id'=>$item->getUniqueId(), 'uri'=>$item->uri}"><img src="{$item->thumbnail_url}" /></a>
			<p><b>{$item->name}</b><br /><a href="{plink bookmarks:removeBookmark!, 'id' => $item->getUniqueId()}" class="ajax">odebrat ze záložek</a></p>
		</div>
  {/foreach}
</div>
{/snippet}
?>
Petr Daňa
Člen | 109
+
0
-

Tak změna, ještě mě napadlo prokrokovat šablonu, tam jsem zjistil, že render funguje jak má. Tak jsem zapnul HttpFox a kouknul, co z toho ajaxovýho volání leze. JSON je v pořádku, ale nějak se tedy neaplikuje:

<?php
{"state":{"paginator-page":null},"snippets":{"snippet-bookmarks-":"<div>\r\n  HORIZONTAL BOOKMARKS\r\n\t\t<div style=\"margin:10px;float:left\">\r\n\t\t\t<a href=\"\/image\/detail\/2701\/s6302455\"><img src=\"\/thumbnails\/000\/000\/medium\/27.jpg\" \/><\/a>\r\n\t\t\t<p><b>S6302455<\/b><br \/><a href=\"\/search\/?bookmarks-id=2701&amp;do=bookmarks-removeBookmark\" class=\"ajax\">odebrat ze z\u00e1lo\u017eek<\/a><\/p>\r\n\t\t<\/div>\r\n\t\t<div style=\"margin:10px;float:left\">\r\n\t\t\t<a href=\"\/image\/detail\/2801\/s6302456\"><img src=\"\/thumbnails\/000\/000\/medium\/28.jpg\" \/><\/a>\r\n\t\t\t<p><b>S6302456<\/b><br \/><a href=\"\/search\/?bookmarks-id=2801&amp;do=bookmarks-removeBookmark\" class=\"ajax\">odebrat ze z\u00e1lo\u017eek<\/a><\/p>\r\n\t\t<\/div>\r\n\t\t<div style=\"margin:10px;float:left\">\r\n\t\t\t<a href=\"\/image\/detail\/3501\/s6302438\"><img src=\"\/thumbnails\/000\/000\/medium\/35.jpg\" \/><\/a>\r\n\t\t\t<p><b>S6302438<\/b><br \/><a href=\"\/search\/?bookmarks-id=3501&amp;do=bookmarks-removeBookmark\" class=\"ajax\">odebrat ze z\u00e1lo\u017eek<\/a><\/p>\r\n\t\t<\/div>\r\n\t\t<div style=\"margin:10px;float:left\">\r\n\t\t\t<a href=\"\/image\/detail\/2901\/s6302431\"><img src=\"\/thumbnails\/000\/000\/medium\/29.jpg\" \/><\/a>\r\n\t\t\t<p><b>S6302431<\/b><br \/><a href=\"\/search\/?bookmarks-id=2901&amp;do=bookmarks-removeBookmark\" class=\"ajax\">odebrat ze z\u00e1lo\u017eek<\/a><\/p>\r\n\t\t<\/div>\r\n\t\t<div style=\"margin:10px;float:left\">\r\n\t\t\t<a href=\"\/image\/detail\/3101\/s6302434\"><img src=\"\/thumbnails\/000\/000\/medium\/31.jpg\" \/><\/a>\r\n\t\t\t<p><b>S6302434<\/b><br \/><a href=\"\/search\/?bookmarks-id=3101&amp;do=bookmarks-removeBookmark\" class=\"ajax\">odebrat ze z\u00e1lo\u017eek<\/a><\/p>\r\n\t\t<\/div>\r\n<\/div>\r\n"}}
?>
Petr Daňa
Člen | 109
+
0
-

Ach jo, zastřelte mě, tohle se mi většinou stává při pátku odpoledne, ale ne v pondělí :-( Problém vyřešen, chyběl mi nalinkovaný jquery.nette.js .

Prosím zamknout nebo smazat.