Zgadzam się, że opcja gridview: true
nie jest dobrze wyjaśniona w dokumentacji. W niektórych przypadkach (jak w przypadku TreeGrid) opcja zostanie automatycznie ustawiona. Więc próbuję wyjaśnić, co to znaczy i dlaczego zalecam zawsze używać opcji gridview: true
i nigdy nie używać afterInsertRow
.
Wiele osób zaczyna od innych języków komputerowych jako JavaScript i pisze swój pierwszy program, który działa w przeglądarce po tym, jak mają jakiś styl pisania programów. Miałem ten sam problem 3 lata wcześniej. Ważne jest, aby zrozumieć, co musi zrobić przeglądarka internetowa po wprowadzeniu pewnych zmian na stronie HTML. W przypadku korzystania z jQuery jest to rzecz, którą na stałe robisz.
Po zmianie elementu DOM na stronie można zmienić pozycję we wszystkich pozostałych elementach DOM istniejących na stronie.Jeśli myślisz o modelu pływającym (jak z float: left
) lub wielu innych ustawieniach CSS, zrozumiesz, że przeglądarka nie może po prostu przesunąć reprezentacji mapy bitowej istniejącej strony i wstawić nowego wstawionego elementu. Tak więc przeglądarka internetowa musi przeliczyć pozycję wszystkich elementów istniejących na stronie i przenieść niektóre elementy z innego miejsca w innym miejscu. Nawet jeśli zmienisz styl CSS elementu, ma miejsce tzw. Reflow. Polecam przeczytać the article i obejrzeć wideo na ten temat.
Głównym celem poprawy wydajności przeglądarki internetowej opisanego powyżej przypadku będzie w celu zmniejszenia liczby zmian na stronie. Więc musisz zmienić 5 stylów jednego elementu DOM, który powinieneś zrobić w jednej operacji. Możesz użyć jQuery.css({...})
ze wszystkimi zmienionymi stylami zamiast 5 oddzielnych połączeń. Jeszcze lepiej może być zdefiniowanie jednej klasy CSS i użycie metody jQuery.addClass
.
W przypadku jqGrid należy wypełnić <tbody>
ze wszystkimi wierszami i komórkami siatki. Jeśli użyjesz opcji gridview: true
, jqGrid zbierze zawartość wszystkich wierszy jako ciągi zawierające fragmenty HTML. Później jqGrid wywołuje jQuery.append
w the line, która ustawia wewnętrznie właściwość innerHTML
, aby ustawić cały fragment HTML na stronie.
powodu tego samego powodu należy użyć cellattr
, rowattr
lub custom formatters który współpracuje z fragmentów HTML reprezentowane komórki lub wiersze jako ciągi. Na końcu ciągi będą dołączane do innych ciągów i będą używane w operacji jQuery.append
, tak jak opisałem powyżej.
Wykorzystanie afterInsertRow
funkcji zwrotnej wymaga, aby każdy wiersz siatki będzie umieszczone na stronie przed wywołaniem z afterInsertRow
zwrotnego. Z tego powodu uniemożliwia korzystanie z opcji gridview: true
i powolne działanie strony.
Dokładniej powinienem wspomnieć, że obniżenie wydajności, które opisałem wcześniej, może być widoczne tylko w przypadku dużej sieci i będzie w większości wyraźne w przypadku powolnej przeglądarki internetowej (np. Internet Explorer, zwłaszcza stare wersje IE) .
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options&s[]=gridview details what and why for gridview. –
Uzgodnione. Zobacz moją odpowiedź na kilka dodatkowych szczegółów. –
Chciałbym również dodać, że 'gridview' to kiepska nazwa dla tej opcji, ponieważ oznacza ona nic, chyba że odwołasz się do dokumentów ... nie jestem pewna, czy mogę zasugerować lepszy nagłówek mojej głowy, choć :) –