Ajax chat pomocí komponent

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

Zdravím,
Potřeboval bych nasměrovat správným směrem..

mám AJAX chat co vypadá následovně:
http://oi57.tinypic.com/vhs13n.jpg

A potřeboval bych ho v kódu zpracovat nejspíš pomocí komponenty.
Po koliknutí na uživatele se pomocí bootstrap collapse vysune okno se zprávami a inputem na posílání nových zpráv.

Potřeboval bych aby se nezávisle:

  • dalo znovuvykreslovat zprávy (na odeslání / přijetí)
  • znovuvykreslovat online status (zelené / červené kolečko vedle jména), bez toho aniž by se collapse zavřel!

Jak to pomocí komponent provedu?
Z dokumentace jsem se nedozvěděl skoro nic, proto se obracím sem :)

Díky!

Myiyk
Člen | 321
+
0
-

Komponenty jsou logické bloky v nette, neřeší uživatelskou část.

Chceš-li nějakou vychytávku pro UI, musíš použít javascript

Azathoth
Člen | 495
+
0
-

@Myiyk a proč by to nešlo ajaxem? Komponenta se umí vykreslit, takže je to jak logická, tak grafická část (všechno, co máš jako komponentu má i nějakou grafiku, tak nechápu, co myslíš tím, že komponenty neřeší uživatelskou část).
Udělat posílání příspěvků by nebylo těžké, prostě bys posílal signál a měl na to handle metodu, ale netuším, jak udělat ajaxově překreslování, když ti něco napíše ten druhý…
Kvůli tomuhle by to asi chtělo čistě javascript.

Editoval Azathoth (6. 6. 2015 13:05)

Lukeluha
Člen | 130
+
0
-

Já osobně jsem nyní do bakalářky řešil AJAXový chat. Měl jsem jednu komponentu s názvem ChatControl, která v sobě obsahovala lidi, kterým můžu napsat, jejich statusy a prostě veškerou logiku na straně serveru. Na straně klienta jsem použil AngularJS, v jQuery nebo v čistém JS bych se z toho zbláznil. Každopádně chat jsem měl téměř stejný jako je na fb, pokud bys měl nějakou jednu chatovací místnost, tak by to šlo udělat poměrně pěkně přes jednotlivé komponenty, v JS by sis jen napsal nějakou kontrolu nově přijatých zpráv po nějakém intervalu + odchytávání event (enter odesílá zprávu, atd).

Myiyk
Člen | 321
+
0
-

@Azathoth aby jsi zjistil, že ti přišla zpráva, musíš periodicky co např. 5s z javascriptu volat tu komponentu a ptát se na nové zprávy.

Záleží na tobě co si budeš serverem posílat. Posílej si raději čistá data, ne šablonu s daty.

Jednoduše z těch dat můžeš sestavit html, které přidáš do chatu. A taky si můžeš vytáhnout ID zprávy, která přišla jako poslední a při tázání serveru na novinky mu to ID budeš posílat, nebo čas kdy zpráva přišla. A server může vracet pouze nové zprávy.

ParallelUniv3rse
Člen | 13
+
0
-

Jojo, to tu uživatelskou část celou mám, šlo mi spíš o to že mám snippet, který obaluje celý chat a pak dynamické snippety se zprávani v jednotlivých konverzacích.. Jenže při překreslení celého chatu kvůli online statusu se mi zavřel collapse s konverzací.
Tak jsem se chtěl zeptat, zda li by to šlo rozkouskovat pomocí komponent tak, aby se to navzájem neovlivňovalo. A předpokládám že mít dvě sady dynamických snippetů v jednom obalujícím snippetu je asi blbost, ne? :)

Zax
Člen | 370
+
0
-

Rozkouskovat to určitě jde, můžeš mít komponentu na celé okno chatu, v tom komponentu na seznam lidí, komponentu na seznam zpráv a komponentu na pole na psaní a odesílání zpráv a každá z těch subkomponent si bude jakoby žít vlastním životem, můžeš je zvlášť překreslovat, v hlavní komponentě můžeš navěšovat eventy (zpráva odeslána → ihned překresli seznam zpráv) atd. Komponenty tvoří strom a presenter je vlastně taky jenom komponenta, takže se s tím pracuje všude naprosto stejně.