ajax + struktura aplikace
- simekadam
- Člen | 36
Zdravim, zacal jsem si delat takovej mensi sranda facebookovej projektik,
abych se naucil s graph api a zaroven trochu s Nette. Zatim to umi akorat
vypsat aktualni newsFeed plus moje statusy.
Rozhodl jsem se nepouzivat zadnej model (zatim), veskery pripojeni
k Facebooku inicializuju v BasePresenteru, od toho potom dedi
ostatni.
Chtel bych se zeptat, jestli to je tak logicke, podle je me ja vlastni model aplikace jakoby to graph API, takze jsem to udelal takhle. Vcera jsem si pridal ajax, ale celkem dlouho mi to trvalo, i kdyz se potom ukazalo, ze reseni je maximalne jednoduche..
Tady bych se chtel zeptat, jestli existuje nejaky aktualni
tutorial, nebo dokumentace jak zachazet se snippety,
nebo jak je to treba s metodou handleAction, ja jsem myslel, ze ta se
vola, kdyz tu akci zavolam ajaxove, tak jsem do ni vlozil
$this->invalidateControl('zkouska')
, ale to se nic
neprekreslovalo, fungovat to zacalo, az kdyz jsem tento radek pridal do metod
renderDefault()
. Vubec mam z ty struktury metod jako
renderAction handleAction a techto presenterskych feature
celkem zmatek, ale nejak se mi nepovedlo najit dokumentaci, co by mi v tom
pomohla
Jinak z mych asi dvaceti pokusu-omylu jsem pochopil, ze zavinace jsou uz
v Nette 2.0 dev vyreseny??
Projekt jsem dal na GitHub, prislo mi to lepsi, nez se postovat cele
tridy(i kdyz je tam jenom par radku kodu) https://github.com/…m/bzukotbook
Dikdy moc za rady!
- bojovyletoun
- Člen | 667
zavináče už neplatí. Pro pochopení action viz Presenter a 2 .
příklady 1
Dále
můj příklad
takže snippetem označíš kus stránky který se bude překreslovat.
v presenteru mám metody třeba handleSmažřádek, handlesmažsploupec(id).
volám dibi::delete.. a následně this->invalidatecontrol(nazevsnipetu). pak
mám createcomponentnovyradek- vytvoří formulář a valid submitnovyradek –
opět dibi::vložit + invalidace.
a renderování je v metodě renderdefault
kde mám jen dibi:select.
Editoval bojovyletoun (22. 12. 2010 11:41)
- simekadam
- Člen | 36
Jo super, diky moc..Jeste teda jsem koukal na to jquery.nette.js a to se teda
vzdy samo postara o nahrazeni snippetu co mi prijdou jako XHR, me tedy pro
ruzne javascriptove ficurky staci vyvolat ten $.get pozadavek a zbytek se zaridi
sam..Pocitam ze s $.post to bude stejne, ale u $.ajax to bude jak?Jako url
nastavim treba this.href
, type si zvolim a dataType bude html, nebo
spis nejakej JSON?
Jinak nema nette nejakou vestavanou podporu na hashe v url?Abych se s tim nestval a potom to nebyl jeden parametr nekde:)Diky
edit: Jeste jsem si vzpomnel..na kolik je prasarna parsovat to povetsinou mega pole co mi vrati facebook az v latte sablone?Zejmena co se tyka vykonu(ono to stejne generuje nejaky PHP, ale stejne)
Editoval simekadam (22. 12. 2010 15:56)
- bojovyletoun
- Člen | 667
nevím jaké pole má facebook…
ale můžeš se tam dát {?Debug::timer()}…{=Debug::timer()}
vestavěná podpotra pro hash není, ale v plánu jsou „ajaxové routy“ – viz video Nette Framework Představení nové verze – asi 0:58
upřesnění. nevím jakou verze jq.nette máš. ale aspoň v mé (upravené verzi) si nastavuji deafultně toto:(tedy tvůj „$.post“ se nastaví pro všechny odkazy s ajax třídou.)
$('a.ajax').live('click', function(event) {
event.preventDefault();
if ($.active) return;
$.post(this.href, $.nette.success);
$.nette.spinner.css({
position: 'absolute',
left: event.pageX+20,
top: event.pageY+40
});
});
- simekadam
- Člen | 36
To jQuery jsem nejak pobral, sice si musim nastudovat co dela $.nette.succes atd..Ten $.nette.spinner je nejaka soucast ty tvy custom verze?
Jinak mam dalsi potiz ohledne sablon..Za prve se mi teda nelibi jak je to slozity, ale to se neda asi nic delat, hlavne by me ale zajimalo, jestli se nejak da predat priznak prvku na kterej jsem kliknul. Proste budu mit treba 20 statusu, pod kazdym cudlik like a kdyz dam like, tak vykonam nejakou metodu handleLike($id) kde se postne ta informace o liku na facebook..a tedka budu chtit zmenit u toho jednoho cudliku like na dislike, popripade pridat „you like this“ atd..Samozrejme bych to mohl udelat pres tu jQuery funkci, ktera bude osetrovat like tlacitka, ale tak nejak jsem si rikal, jestli to nejde pres ty snippety..Proste kdyz ta invalidace, tak pekne slape a ja se vubec nemusim starat o nahrazovani dat, tak by se mi to libilo i tady..Doufam, ze je to pochopitelny, nejak jsem dneska uz trochu prejetej..Pro jistotu se davam tu sablonu(u toho odkazu na like neni jeste ten parametr id, musim nastudovat kde to id presne je v tom apicku)
BTW jak se tady zapina zvyrazneni syntaxe v html?Mam pocit, ze mi to slo:D ← pohoda
`{block #statuses}
{snippet zkouska}
{foreach $statuses['data'] as $status}
<div class="post">
<img alt="" class="profilePicture" src="http://graph.facebook.com/{$status['from']['id']}/picture"/>
<div class="postSubDiv">
<div class="post_user">{$status['from']['name']}</div>
<div class="statusMessage">{$status['message']}</div>
{ifset $status['comments']}
{foreach $status['comments']['data'] as $datas}
<div class="comments">{$datas['message']}</div>
{/foreach}
{/ifset}
{ifset $status['likes']}
<div class="likeTag">{if count($status['likes']['data'])>0}
{$status['likes']['data'][0]['name']}{if count($status['likes']['data'])>1} and {? echo(count($status['likes']['data'])-1)} others{/if} like this.
{/if}
<span class="likeThis"><a class="ajaxAction" href="{link like}">Like</a></span>
</div>
{/ifset}
</div>
</div>
{/foreach}
{/snippet}
{/block}
Editoval simekadam (22. 12. 2010 22:02)
- bojovyletoun
- Člen | 667
Například zápis <a n:href=„IlikeIt!, 3“>Link</a>,
(v presentgeru funkce function handleILikeIt($x)) vygeneruje odkaz http://localhost/…ka/index.php?…
2. z hlavy {if $status[‚like‘]}{link Like!, $status[‚id‘]}{else}{link
Fuj!, $status[‚id‘]}{/if}
nevím, možná to nějak obal do snippetu
Otázka na další:
- existuje možnost psát {if $status[like]} bez uvozovek ? nebo {link Sig!, [1,2,3]}
- jde <a n:href> kombinovat s if a else? jako třeba <a n:if="$tatus n:href… n:else-href> jde o spíš takovou akademickou možnost, v reálu to člověk píše srozumitelně intutitivně
- Platí stále tato kapitola (myslím předávaní proměnných bez neázvů v poli a do toho s/bez persist parametrů)
- existuje v dokumentaci popis novinek a souhrn možností ze zde