2013-08-01 15 views
9

Używam require.js do robienia leniwego ładowania aplikacji JavaScript. Chciałbym przełączyć się na stos meteorów, ale teraz wygląda na to, że Meteor wysyła całą aplikację (wszystkie szablony) do początkowego obciążenia. Czy ktoś miał sukces z require.js i meteorytem lub jakąkolwiek inną implementacją?Leniwe szablony ładowania w Meteoru

Odpowiedz

5

Zadajesz różne pytania, ale na pewno są ze sobą powiązane. Pierwsza dotyczy ładowania dodatkowego kodu javascript do twojej aplikacji meteor. Oczywiście możesz użyć rzeczy takich jak requirejs. To powinno działać dobrze, zakładając, że twój leniwy kod znajduje się w katalogu twojego projektu meteor. Jednak moim doświadczeniem jest to, że requirejs szaleje, gdy zawartość public jest często aktualizowana, więc na przykład w środowisku programistycznym. Może to kwestia dostosowania biblioteki, ale wolałbym raczej polecić użycie lekkiego homebrewed paczki. Spójrz na here, jeśli potrzebujesz inspiracji.

Drugie pytanie dotyczy definicji leniwego szablonu. Każdy szablon składa się z dwóch części. Pierwszy to kod html, napisany w składni handlebars, drugi to cały kod javascript, który piszemy, aby zdefiniować zachowanie twojego szablonu (np. Pomocników, programów obsługi zdarzeń). Druga część jest łatwa, o ile zakładamy, że już wiemy, jak załadować leniwy kod (zobacz powyższy akapit), a szablon, nazwijmy go myLazyTemplate, jest już zdefiniowany, więc w zasadzie Template.myLazyTemplate nie jest undefined. Jak więc osiągnąć ten drugi?

Aby dynamicznie zdefiniować nowy szablon będzie trzeba zadzwonić Template.__define__(name, raw_func) na kliencie. Zatem ostatnie pytanie brzmi: "co to jest raw_func?". Jest to skompilowany wersję swojej kod HTML który normalnie jest tworzony automatycznie na serwerze, a następnie zesłany przewód do klienta, gdy aplikacja zostanie załadowany (patrz here aby zobaczyć, jak to się robi w meteor). Ale chcemy robić to dynamicznie, prawda?

Ideą jest ręczne skompilowanie kodu szablonu za pomocą procedury Handlebars.to_json_ast. Możesz go podać swoim kodem szablonu html, a wynik to pewna tablica javascript, którą można wysłać do klienta w dowolnym momencie dzięki metodzie, o której już rozmawialiśmy. Ostatnią rzeczą, którą musisz zrobić, to zadzwonić pod numer Handlebars.json_ast_to_func na kliencie, używając danych wysłanych z serwera jako jedynego argumentu. Dane wyjściowe wyprodukowane przez Handlebars.json_ast_to_func to raw_func, którego można użyć do utworzenia szablonu myLazyTemplate.

Jestem świadomy, że to tylko zgrubny pomysł, a nie całe rozwiązanie twojego problemu. Mam nadzieję, że to pomoże ci samemu znaleźć ostateczne rozwiązanie.

+0

Dzięki za bardzo szczegółową odpowiedź, był to tylko poziom opisu, którego szukałem. – James

+1

Ta odpowiedź jest prawdopodobnie nieaktualna. Zobacz [jak leniwe szablony obciążeń na żądanie w Meteor] (https://stackoverflow.com/a/28334315/1269037), a pakiety dostępne dla tego od lutego 2015. –