AJAXová control, signál funguje, ale nepřekreslí se
- Petr Daňa
- Člen | 109
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
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&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&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&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&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&do=bookmarks-removeBookmark\" class=\"ajax\">odebrat ze z\u00e1lo\u017eek<\/a><\/p>\r\n\t\t<\/div>\r\n<\/div>\r\n"}}
?>