Wywołuję usługę internetową, która zwraca tablicę obiektów w formacie JSON. Chcę wziąć te obiekty i wypełnić div za pomocą HTML. Powiedzmy, że każdy obiekt zawiera adres URL i nazwę.
Gdybym chciał wygenerować następujący kod HTML dla każdego obiektu:
<div><img src="the url" />the name</div>
Czy istnieje najlepsza praktyka? Widzę kilka sposobów na zrobienie tego:
- Połącz ciągi
- Twórz elementy
- Użyj wtyczki do tworzenia szablonów
- Wygeneruj kod HTML na serwerze, a następnie wyświetl go za pomocą formatu JSON.
Odpowiedzi:
Opcje # 1 i # 2 będą twoimi najbardziej bezpośrednimi opcjami, jednak w przypadku obu opcji będziesz odczuwać wpływ na wydajność i konserwację, budując ciągi znaków lub tworząc obiekty DOM.
Tworzenie szablonów nie jest wcale takie niedojrzałe i widzisz je wyskakujące w większości głównych frameworków Javascript.
Oto przykład wtyczki szablonu JQuery , która pozwoli Ci zaoszczędzić wydajność i jest naprawdę, bardzo prosta:
Mówię, idź fajną drogą (i lepszą wydajnością, łatwiejszą w utrzymaniu) i używaj szablonów.
źródło
Jeśli absolutnie musisz połączyć ciągi znaków zamiast normalnych:
użyj tymczasowej tablicy:
Używanie tablic jest znacznie szybsze, szczególnie w IE. Jakiś czas temu przeprowadziłem testy ze stringami w IE7, Opera i FF. Opera zajęła tylko 0,4 sekundy, aby przeprowadzić test, ale IE7 nie skończył po 20 MINUTACH !!!! (Nie, nie żartuję.) Z tablicą IE był bardzo szybki.
źródło
Każda z dwóch pierwszych opcji jest zarówno powszechna, jak i akceptowalna.
Podam przykłady każdego z nich w Prototype .
Podejście nr 1:
Podejście nr 2:
źródło
Być może bardziej nowoczesnym podejściem jest użycie języka szablonów, takiego jak Mustache , który ma implementacje w wielu językach, w tym w javascript. Na przykład:
Otrzymujesz nawet dodatkową korzyść - możesz ponownie użyć tych samych szablonów w innych miejscach, na przykład po stronie serwera.
Jeśli potrzebujesz bardziej skomplikowanych szablonów (instrukcje if, pętle itp.), Możesz użyć Handlebars, który ma więcej funkcji i jest kompatybilny z Mustache.
źródło
Oto przykład użycia mojej wtyczki Simple Templates dla jQuery:
źródło
Możesz dodać szablon HTML do swojej strony w ukrytym div, a następnie użyć cloneNode i funkcji zapytań swojej ulubionej biblioteki, aby go wypełnić
źródło
Ujawnienie: jestem opiekunem BOB.
Istnieje biblioteka javascript, która znacznie ułatwia ten proces, zwana BOB .
Twój konkretny przykład:
Można to wygenerować za pomocą BOB za pomocą następującego kodu.
Lub z krótszą składnią
Ta biblioteka jest dość potężna i może być używana do tworzenia bardzo złożonych struktur z wprowadzaniem danych (podobnie do d3), np .:
BOB obecnie nie obsługuje wprowadzania danych do DOM. To jest na liście rzeczy do zrobienia. Na razie możesz po prostu użyć wyniku razem z normalnym JS lub jQuery i umieścić go w dowolnym miejscu.
Zrobiłem tę bibliotekę, ponieważ nie podobała mi się żadna z alternatyw, takich jak jquery i d3. Kod bardzo skomplikowany i trudny do odczytania. Praca z BOBem jest moim zdaniem, co jest oczywiście stronnicze, dużo przyjemniejsza.
BOB jest dostępny na Bower , więc możesz go zdobyć biegając
bower install BOB
.źródło
1) To jest opcja. Zbuduj kod HTML za pomocą JavaScript po stronie klienta, a następnie wstaw go do DOM jako całości.
Zauważ, że za tym podejściem kryje się paradygmat: serwer generuje tylko dane i (w przypadku interakcji) otrzymuje dane od klienta asynchronicznie z żądaniami AJAX. Kod po stronie klienta działa jako samodzielna aplikacja internetowa JavaScript.
Aplikacja internetowa może działać, renderować interfejs nawet bez włączonego serwera (oczywiście nie wyświetla żadnych danych ani nie oferuje żadnej interakcji).
Ten paradygmat jest ostatnio często przyjmowany i całe frameworki są budowane wokół tego podejścia (patrz na przykład backbone.js).
2) Ze względu na wydajność, jeśli to możliwe, lepiej jest zbudować kod HTML w ciągu znaków, a następnie wstrzyknąć go jako całość na stronę.
3) Jest to kolejna opcja, poza przyjęciem struktury aplikacji sieci Web. Inni użytkownicy opublikowali różne dostępne silniki szablonów. Mam wrażenie, że masz umiejętności ich oceny i podjęcia decyzji, czy podążać tą ścieżką, czy nie.
4) Inna opcja. Ale podawaj to jako zwykły tekst / html; dlaczego JSON? Nie podoba mi się to podejście, ponieważ łączy PHP (język twojego serwera) z Html. Ale często uważam to za rozsądny kompromis między opcją 1 i 4 .
Moja odpowiedź: już patrzysz we właściwym kierunku.
Proponuję przyjąć podejście od 1 do 4 tak jak ja. W przeciwnym razie zastosuj framework sieciowy lub silnik szablonów.
Tylko moja opinia oparta na moim doświadczeniu ...
źródło