ajax + struktura aplikace

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

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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