2013-05-23 16 views
18

Czy istnieje łatwa metoda na zachowanie tego samego nagłówka/stopki podczas nawigacji na stronach jQueryMobile? Jedyne rozwiązania, jakie do tej pory spotkałem, polegają na dynamicznym wstrzykiwaniu go na zmianę strony, ale to powoduje zmianę przejść i po prostu klonuje elementy, potrzebuję oryginału.Jak zachować ten sam nagłówek/stopkę na stronach w jQueryMobile?

Czy istnieje oficjalnie obsługiwany sposób? Wydaje mi się dziwne, że wydaje mi się, że jedyny boryka się z tym problemem?

+1

Masz na myśli to, że zostały one naprawione podczas przejścia bez animacji? Czy może mieć ten sam nagłówek/stopkę dla wszystkich stron? – Omar

+0

@Omar Ten sam nagłówek/stopka dla wszystkich stron .. Chciałbym, żeby były animowane, ale nie jest to duży problem, jeśli tylko sama strona jest animowana. – Muis

Odpowiedz

9

Wbudowane rozwiązanie Twojego problemu nie istnieje. jQuery Mobile nie ma rozwiązania, które będzie współdzielić nagłówek i stopkę pomiędzy załadowanymi stronami.

Jedyne co możesz zrobić, to dynamiczne wstrzykiwać je lub mieć je od samego początku. W twoim przypadku robisz to w nieodpowiednim momencie. Jeśli chcesz poprawnie dodać nagłówek i stopkę, musisz to zrobić podczas prawidłowego zdarzenia strony.

przykład roboczych: http://jsfiddle.net/Gajotres/xwrqn/

Swipe zmianie stron i zobaczyć jak to działa (nie chciałem zajmować się dodawanie przycisków na każdej stronie).

$(document).on('pagebeforecreate', '#article2, #article3', function(){ 
    $('<div>').attr({'data-role':'header','data-theme':'b','data-position':'fixed','data-id':'footer'}).append('<h3>Article</h3>').appendTo($(this)); 
    $('<div>').attr({'data-role':'footer','data-theme':'b','data-position':'fixed','data-id':'footer'}).append('<h3>Article footer</h3>').appendTo($(this));  
}); 

Jeśli zrobisz to podczas tworzenia strony, to wywoła TYLKO jeden raz, gdy strona zostanie utworzona po raz pierwszy. Zawartość dynamiczna zostanie dodana, a ponieważ funkcja pagebeforecreate zostanie uruchomiona przed dodaniem znaczników zawartości, nie będziesz musiał się martwić stylizacją nagłówka i stopki.

Zwróć uwagę na atrybut "identyfikator danych": "stopka" dodana do każdego nagłówka i stopki, ponieważ tylko treść będzie animowana podczas przejścia strony, nagłówek i stopka będą wyglądać tak samo. Ponadto, jsFiddle ma błąd, przesuwając po stronach, przeskoczy 1-2px. To się nie stanie w rzeczywistym życiu.

+0

To wydaje się właśnie takie rozwiązanie, którego chciałem uniknąć. Na przykład, jeśli umieściłem pole rozwijane w stopce, a użytkownicy dokonają tam wyboru, jego wybór zostanie utracony po wstawieniu sklonowanej stopki w następnym strona. – Muis

+0

Masz rację, ale dobre rozwiązanie nie istnieje tutaj. Będziesz musiał przechowywać takie dane między przejściami i pokazać je ponownie na nowej stronie. Cokolwiek o tym myślisz, nie jest to trudne ze skomplikowanego rozwiązania. Uwierz mi, że stracisz więcej czasu szukając rozwiązania, które chcesz, a potem zajmie ci to tak. Obecnie w widżetach strony jQuery Mobile 1.3.1 nie można korzystać poza apage. Będzie to możliwe w jQuery Mobile 1.4 ale musisz poczekać, aż wyjdzie. I razie ich wątpliwe, czy to zadziała jak należy. – Gajotres

+1

Na razie przestałem używać systemu stron i używam tylko jednej strony, na której symuluję inne strony, ukrywając/wyświetlając DIV. To naprawdę szalone, że muszę ponownie wymyślić koło, tylko dlatego, że normalny system stronicowania nie obsługuje tego. W każdym razie, dzięki za pomoc! – Muis

14

Najprostszym sposobem jest dodanie atrybutu "identyfikator danych" do nagłówków i stopek na wszystkich stronach. Aby nagłówek/stopka była "trwała", używaj tego samego identyfikatora danych na wszystkich stronach.

<div id="page1"> 
<div data-role="header" data-id="main-header"></div> 
... 
<div data-role="footer" data-id="main-footer"></div> 
</div> 

<div id="page2"> 
<div data-role="header" data-id="main-header"></div> 
... 
<div data-role="footer" data-id="main-footer"></div> 
</div> 

Można by również chcą usunąć nagłówki i stopki albo z CSS lub dane pozycji = „Fixed”.

Mam nadzieję, że to pomoże.

+2

Wow, to mi się udało! Tak łatwe w porównaniu do innych rozwiązań. – lapo

+0

FYI, działało to dla stopki, ale nie dla nagłówka. Testowałem to w jQM 1.4 –

+0

@Mahendra, czy możesz mi powiedzieć, jak to zaimplementowałeś? Jak łączysz stopkę z '

'? Czy masz osobny plik 'footer.html'? – adiga

0

Oto jak rozwiązać podobny problem:

 $(":mobile-pagecontainer").on("pagecontainerbeforetransition", function (event, ui) { 
      $("#header").prependTo(ui.toPage); 
      $("#control-panel").appendTo(ui.toPage); 
     }); 

utrzymuje ten sam nagłówek/stopkę podczas przeglądania stron jQueryMobile. Wstrzykuje dynamicznie na zmianę strony, wkręca przejścia, ale nie klonuje elementów, podaje oryginał.

+0

Spowoduje to dodanie nagłówka/stopki przed KAŻDYM przejściem do strony – HughHughTeotl

+0

Nie dodaje. Przemieszcza. I tak, przed każdym przejściem. Jest to prosty sposób na sprostanie większości kryteriów PO. – Jayen