2012-12-26 7 views
23

Zajrzałem do Ember.js i wygląda naprawdę świetnie, ale jedną rzecz, która mnie niepokoi i nie mogę się skupić na tym, jest to, że zacznę używać go w już działającym projekcie.Emberjs, strona serwera po stronie klienta, wszystko w?

Czy w końcu będę musiał przenieść wszystkie strony klienta i sprawić, że moja aplikacja będzie kiedyś jedną stroną?

pozwól mi wyjaśnić ...

Dotychczas najlepszym sposobem komunikowania się między klientem a serwerem za pomocą Ember jest REST. i wygląda świetnie, ale nie podoba mi się to, że wszystkie szablony są ładowane po raz pierwszy. i przeniesienie całej logiki na moim serwerze do klienta (lub czy otrzymuję to wszystko źle?), ponieważ wygląda na to, że moja strona serwera stanie się logicznym interfejsem API REST.

Również używam Yii Framework, który ma niektóre komponenty JavaScript (Ajax włączone), takie jak grids. jak mogę mieć embera współdziałać z tym wszystkim na navigation bez konieczności przepisywania kilku rzeczy, które już działają na mojej aplikacji?

Jestem na stronie logowania (lub stan), a następnie po zalogowaniu się, muszę wyświetlić grid, to jest po prostu łatwe z Yii i pełne ładowanie strony, ale jeśli używam Ember, jak czy mogę wyświetlać siatkę tak jak zwykle? czy muszę wstępnie wczytać szablon kierownicy dla siatki, a także JavaScript, który steruje nim?

+0

Jeśli chodzi o logikę, w rzeczywistości nie przenosisz całej logiki po stronie klienta, przenosisz logikę przejścia stanu tylko do klienta, a reszta twoich obliczeń pozostaje tylko na serwerze. – Hyder

Odpowiedz

10

Nie, nie należy przenosić wszystkiego na stronę klienta, w szczególności uwierzytelniania i sprawdzania poprawności, które można pominąć w inny sposób.

To, co przenosisz do Emberjsa, to część Yii-s View MVC, sterownik wyświetli wynik, np. JSON.

że dane następnie zostaje odwzorowany na Embers modelu części przez Ember routingu i kontrolerów itp

Od wymieniasz logikę prezentacji Yii z żaru nie należy używać klas UI Yii jak CGridView. Łączenie ich może być możliwe, ale nie wydaje się to dobrym pomysłem. Musisz biegać w Ember.

http://www.yiiframework.com/wiki/409/ember-js-with-yii-rest-backend-demo-application/

+0

To wygląda na prawidłową drogę, W końcu musiałem zacząć wyprowadzać JSON ze sterowników i mieć wszystkie części "V" MVC przeniesione do Ember.JS SlickGrid wydaje ładny zamiennik dla CGridView – Asgaroth

7

Wystarczy, że dodasz tutaj perspektywę Yii. Wiele "magii" widoków/list siatki dzieje się w obrębie dostawcy danych (dla skomplikowanego wyszukiwania, sortowania i filtrowania) oraz danych sformatowanych za pomocą analizowanych pól w modelach.

Abyś mógł wykorzystać te same koncepcje po stronie serwera i po prostu wyprowadzić ostateczny JSON, podzielony na strony i wszystkie, z własnego widgetu; lub nawet po prostu przesłonić widok siatki i wyświetlić json zamiast widoku po przetworzeniu danych/konfiguracji.

Gdy już masz JSON zamiast HTML, bardzo łatwo jest powielić przednią część siatki, tak naprawdę nie ma tam zbyt wiele funkcjonalności.

To może nie być idealne, ale oznacza to, że nie trzeba przenosić całej logiki na potrzeby stronicowania, wyszukiwania i filtrowania po stronie klienta.

TL; DR; Zastępuj widżety Yii, dla których masz już wbudowaną funkcjonalność, i używaj ich do wyprowadzania JSON zamiast HTML.

+0

To jest to, o czym myślałem, ale wymagam trochę pracy i przepisania. dzięki – Asgaroth

+0

Tak, myślę, że to jedyny sposób, aby uzyskać najlepsze z obu światów. Możliwe, że możesz skopiować widok 'CGridView' i dostosować go do formatu szablonu? Ale to jest poza moim królestwem i na Ember.js – Paystey

2

Z mojego doświadczenia wynika, można po prostu przejść do istniejących kontrolerów i działań (przez CLI lub HTTP) z serverside JS. Zrobiłem to samo z moją istniejącą aplikacją zintegrowaną z node.js.

Zaletą tego jest to, że możesz zachować swój kod jako awarię dla przeglądarek nie w pełni obsługujących twoje nowe implementacje lub dla robotów, które nie są najlepsze w javascriptach.

I tak napisałem cały app in my models, mam tu na myśli kontrolę danych itp., Rzeczywistą funkcjonalnością są komendy. A jeśli przeglądarka nie jest obsługiwana lub wyłącza javascript, wszystko wraca do normalnego trybu z kotwami i ładowaniami stron, za pomocą UrlManager i rzeczywistych kontrolerów i działań. Sterowniki te są proste i mają działanie: call the commands. Oczywiście z pomocnikiem konwertującym dane wyjściowe json na dane użytkowe dla widoków.

Ładowanie strony ma domyślne widoki php i kontrolerów, ponieważ jest już dostępna.