Zastąpienie jqGrid darmową kontrolką
Gdy pod koniec 2013 roku zaczynałem pracę nad swoim frameworkiem, jednym z najważniejszych wyborów, które musiałem podjąć, był wybór kontrolki grida. Po przeanalizowaniu dostępnych rozwiązań, zdecydowałem się na jqGrid. Wydawał się prosty w obsłudze i miał dobre wsparcie po stronie serwerowej ASP.NET MVC (tzn. builder i model binder). Do tego był darmowy. No właśnie - tu jest problem - BYŁ. Od grudnia 2014 przestał być dostępny na licencji MIT, i z tego powodu stanąłem przed koniecznością zamiany go na coś darmowego.
Wybór zamiennika…
Kontrolek gridowych jest cała masa. Niestety, gorzej jest z ich wsparciem dla MVC. Sprawdziłem dwa dość popularne rozwiązania: Data Tables
i SlickGrid
. O ile znajdzie się nugetowa paczka zawierająca w miarę aktualny kod frontendowy, o tyle builderów po stronie serwerowej czy modelbinderów już brak. Niestety, ja nie mam czasu na poznawanie API kontrolki, a potem pisanie samemu od zera serwerowego kodu…
Parę słów wyjaśnienia o programowaniu frontendu
Tak, wiem, że teraz pisze się aplikacje SPA w oparciu o webowe frameworki MVVM jak Konckout
czy Angular
. Wiem, że pakiety ściąga się z Bowera
, NPMa
, a nie NuGeta
. Ogólnie dużo wiem, korzystałem “trochę” z tego wszystkiego. Problem w tym, że za każym razem, gdy rano spróbuje użyć jakiegoś frameworka javascriptowego, wieczorem koledzy śmieją się ze mnie, że używam staroci, bo od południa jest on już niemodny. No cóż, nie czytam Jsmopolitan, to nie wiem. ;)
Dopóki w projekcie mam wpływ na technologię, trzymam się od niestabilnego świata frontendowych biblioteczek możliwie z daleka. Ideą PizzaMVC jest to, aby programista mógł skupić się na programowaniu funkcji biznesowych, a nie walce z frameworkami frontendowymi. Aby to osiągnać, cały kod JS można wyrenderować w stabilny i bezpieczny sposób po stronie serwera. Oczywiście, PizzaMVC mogłaby korzystać np. z Angulara i jego kod mógłbym generować automatycznie. Nie widzę jednak z tego żadnego zysku, poza złudą bycia “nowoczesnym”.
…zamiennik wybrany
Ostatecznie zdecydowałem się na… free jqGrid. Okazało się, że ktoś zrobił darmowego forka kontrolki, któej używałem do tej pory. Builder i modelbinder zostają te same, moje pomocnicze klasy działają dalej. Na dodatek pakiet ma aktualną paczkę NuGetową.
A zatem, cała moja praca ograniczyła się do przeinstalowania paczek nugetowych i dodania takiej linijki:
Żyć nie umierać!
Ale nie do końca…
Biblioteka MvcJqGrid
, która odpowiada za backendową część tego przedsięwzięcia jest nieaktualna (ostatnia wersja z 2014 roku), nie obsługuje kilku nowych atrybutów, na dodatek nie wpełni wspiera ustawienia lokalizacyjne. Niektóre teksty (np. na przycisku Clear czy datepickerze) są zahardcodowane. Na dodatek jest napisana w sposób całkowicie nierozszerzalny - każdy atrybut ma swoje pole, każde pole jest prywatne, nie ma jak z niej dziedziczyć i dodać swojej metody konfigurującej nowy atrybut. Prawdopodobnie będę musiał coś z tym zrobić.