Hej!
Pytanie nie 100% związane z railsami / ruby ale dosyć mocno powiązane. Otóż - tworze już od dłuższego czasu aplikacje w railsach. Na początku do jakichś ajaxowych akcji używałem js.erb
i remote: true
(nie wiem czy istnieje jakaś ogólna nazwa na ten sposób obsługi ajaxowych requestów?) i jquery jednak z czasem, wiadomo, “widgety” i funkcjonalności javascriptowe stawały się coraz bardziej skomplikowane i używanie czystego jquery z pomocą remote: true
przestało dawać radę. Co więcej, chyba nie jest to wskazany sposób obsługi zdarzeń asynchronicznych; wysyłanie ajax requesta pod określony adres i zwracanie już wygenerowanego kodu html - wydawało mi się to po prostu dziwne i nie poprawne. Poszukałem trochę w necie i faktycznie, nie tylko ja miałem podobne wątpliwości.
Postanowiłem więc spróbować embera i angulara. O ile pierwszy framework kompletnie mi nie podszedł, to w angularze praktycznie się zakochałem i zacząłem używać go gdzie tylko się dało. Jednak, niestety, wrażenie “niepoprawności” pozostało.
O co mi chodzi - aplikacje, które tworzę najczęściej składają się z widoków z wygenerowanym już markupem html. Nie są to ani “one-page app” ani żadne takie cuda, po prostu zwykła aplikacja railsowa z jakimiś pojedynczymi angularowymi “widgetami” (np. jakiś względnie skomplikowany formularz filtrowania wyników z select2 i takimi rzeczami), które komunikują się z aplikacją za pomocą jsonowego api. Zazwyczaj tworzę angularową dyrektywę i inicjuje ją w railsowych widokach za pomocą ng-controller
.
O ile z angularem pracuje mi się świetnie, o tyle towarzyszy temu nieodparte wrażenie, że zaprzęgnąłem do bardzo prostej rzeczy (małe widgety) potężne narzędzie, stworzone z myślą o znacznie większych zastosowaniach (całe aplikacje z routingiem, autoryzacją itp). W skrócie to tak jak bym kupił sobie lotniskowiec żeby pływać nim z kumplem wędkować na jeziorze; niby się da ale ponton byłby znacznie lepszy.
Kolejną sprawą, która wzbudza moje wątpliwości jest komunikacja na linii rails <–> angular. Z grubsza, zawsze przekazuje do dyrektywy albo ID np. wyświetlanego aktualnie posta na blogu i resztę sobie dociągam z api, albo przekazuje cały obiekt JSON. Obydwie opcje również wydają mi się jakieś bardzo nienaturalne i mam poczucie, że robię to źle.
Ogólnie rzecz biorąc ciężko mi sformułować czego konkretnie szukam, pytanie brzmi raczej co robię źle i czy istnieją jakieś inne sposoby / frameworki o których nie mam pojęcia, a są stworzone właśnie dla takich zastosowań jakich szukam. Czyli nie osobne, kompletnie odizolowane od wszystkiego biekty (jak dyrektywy) a raczej coś, co świetnie wpina się w już wygenerowany markup i doskonale się z nim dogaduje. Bez przekazywania obiektu json jako argumentu.
Tak na pierwszy rzut react.js wydaje się idealne dla mnie (bo bazuje na już wygenerowanym markupie?) ale okropnie nie podoba mi się mieszanie się kodu html z kodem js. Chociaż być może o czymś nie wiem; po prostu nie udało mi się trafić na nic w stylu “react.js templates”. Wszędzie widzę raczej plik js z wymieszanymi znacnzikami html i kodem javascript.
Jak radzicie sobie z podobnymi wyzwaniami? Z góry dzięki za sugestie i podzielenie się swoimi sposobami