2012-10-25 11 views
9

W Backbone.js, ładowanie i zapisywanie modelu odbywa się przez wywołania ajax. Czy istnieją jednak jakieś dobre praktyki, aby załadować kolekcję początkową przy ładowaniu strony bez konieczności ciągnięcia tego przez ajax? Próbuję wykonać możliwie jak najwięcej renderowania po stronie serwera z góry.Jakie jest najlepsze podejście do ładowania początkowych danych w pliku Backbone.js?

W przeszłości byłem rozstawiony html ze zmienną javascript zawierających ciąg json początkowego stanu danych, więc może być renderowane po stronie serwera, ale nie jestem pewien, czy jest to dobra praktyka.

Odpowiedz

0

Wybrane podejście będzie prawdopodobnie zależało od ilości danych, które zamierzasz załadować i od tego, w jaki sposób dane będą używane na stronie.

Jeśli większość wymaganych danych nie zostanie ostatecznie wyświetlona na stronie, ładowanie początkowego stanu do zmiennej javascript może nie być złe.

Jeśli dane są bezpośrednio związane z prezentacją strony, można jednak przeanalizować wstępnie renderowany DOM dla początkowego stanu aplikacji szkieletowej. Obowiązkowa uwaga jest taka, że ​​ten rodzaj analizy będzie nieco wolniejszy, szczególnie w przypadku dużych zbiorów danych.

Jeśli w końcu zdecydujesz się na przetwarzanie wstępnie renderowanych treści, połączyłem pewną liczbę kopii zapasowych, która może okazać się przydatna do odwzorowania prezentowanej treści w formie gotowej do tworzenia szkieletu.

5

Nie wiem, czy to koniecznie najlepsza praktyka, ale ta metoda wysiewu html z json obiektu (nie json strun jak opisał to, prawda?), To z pewnością mój preferowany sposób prowadzenia początkowe ładowanie. Nie tylko z (oczywistego) powodu, że usuwa opóźnienie oczekiwania na pierwsze wywołanie AJAX, ale także dlatego, że jedno mniej otwarte połączenie zwalnia przeglądarkę, aby załadowała coś innego (jak img src lub inny), do document.onLoad nieco wcześniej.

Zaleca się, aby podczas korzystania z tej metody umieścić tę zmienną w znaczniku skryptu na spodzie treści (tj. Nie w sekcji head), aby nadać statycznym elementom HTML na stronie szansę najpierw załadować i wyrenderować. Dane json są gotowe po uruchomieniu document.onLoad.

+0

Jedyną wadą tego podejścia jest mamy bład języka backend generującego javascript, a cała „init” faza aplikacji jest w pewnym .erb szablonu (lub JSP/php/etc), a potem na ziemi javascript. Czasem pachnie jak spaghetti. –

1

Od Backbone docs inicjowanie modeli w tagach skryptów nie jest złą praktyką. W moim obecnym projekcie zdecydowałem się ustawić tylko zwykłe obiekty wewnątrz window.projectData, aby móc inicjować modele Backbone w zewnętrznych javascriptach.

<script> 
    ;(window.projectData || (window.projectData = {})).modelName = {/* value */}; 
</script> 
Powiązane problemy