Dyskretny Nokaut
Ostatnio doszedłem do nokautu i uważam, że to fantastyczny framework. Mam jednak jedno zmartwienie.
Stwierdzam, że w nietrywialnych przypadkach wiążących, mam fragmenty kodu javascript wkradające się do mojego widoku (znaczniki). W rzeczywistości sporo próbek kodu w dokumentacji Knockout również to pokazuje.
Czy to sprawia, że nokaut jest natrętny?
Czy powinnam po prostu zaakceptować to, czym jest i nie martwić się w praktyce?
A może są jakieś wzory/techniki, które powinienem stosować, aby nokaut był dyskretny?
5 answers
Świetne pytanie. Pisałem złożone widoki KnockoutJS przez jakiś czas i nigdy nie byłem zadowolony, dopóki nie przełączyłem się na Ryan Niemeyer ' S class binding provider.
Knockout ClassBindingProvider pozwala zadeklarować powiązania w obiekcie JavaScript, a następnie odwołać się do nich z atrybutu data-class
podobnego do działania klas css. Działa świetnie!
Zobacz przykład aplikacji Tomvc .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-22 16:09:37
Staraj się trzymać Javascript z dala od powiązań i używaj go tylko do metadanych
Więc zamiast robić
<span data-bind="visible: errors().length > 0">You have errors</span>
Użyj obliczonej obserwowalnej
<span data-bind="visible: hasErrors">You have errors</span>
Aktualizacja: poszedłem do przodu i stworzyłem Konwencję nad API konfiguracji dla KO Można go znaleźć tutaj https://github.com/AndersMalmgren/Knockout.BindingConventions/wiki
Zamiast robić <button data-bind="click: save">Save</button>
robisz <button data-name="save">Save</button>
. Biblioteka zrozumie zgodnie z konwencją, że chcesz podłączyć funkcję Zapisz do przycisku kliknij przycisk handler. Zgodnie z konwencją będzie to również wiązać włączyć, jeśli członek canSave jest obecny.
http://jsfiddle.net/3Ajnj/15/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 07:43:01
Czy powinnam zaakceptować to, czym jest i nie martwić się w praktyce?
Rozumiem, że "dyskretny" oznacza kilka różnych rzeczy.
Jednym z aspektów "dyskretnych" jest to, że strony internetowe powinny utrzymywać podstawową funkcjonalność w przeglądarkach z ograniczoną obsługą JavaScript lub wcale. W tym celu Twoja troska o tę zasadę powinna zależeć od grupy docelowej. Pracowałem nad projektami, w których znałem swoją grupę docelową na tyle dobrze, że miałem Luksus mówiąc: "jeśli chcesz skorzystać z tej aplikacji internetowej, użyj nowoczesnej przeglądarki, takiej jak Chrome, z włączoną obsługą JavaScript."W tym przypadku nie krępuj się, aby zaszaleć z najnowszymi, najwspanialszymi frameworkami front-endu.
Pracowałem nad innymi projektami, w których tak nie było, musieliśmy być bardzo ostrożni z używaniem frameworków takich jak Knockout. Jeśli polegasz w dużej mierze na Nokautowaniu, aby wykonać podstawową funkcjonalność w aplikacji, Twoja aplikacja jest z natury natrętna. Czy lub nie powinno to przeszkadzać, zależy od grupy docelowej.
Inną zasadą "dyskretnego JS" jest rozdzielenie obaw między JavaScript i HTML. W rzeczywistości debatuję nad tym, jak bardzo ważna jest ta zasada. Myślę, że ważniejszą zasadą jest rozdzielenie obaw pomiędzy logiką modelu widoku i logiką wyświetlania , zgodnie ze wzorem MVVM. Knockout robi fantastyczną robotę zachęcając do czystego oddzielenia problemów widoku/maszyny wirtualnej, nawet jeśli włożysz trochę Logika JavaScript w powiązaniach danych. Tak długo, jak jest to ściśle widok logika, myślę, że faktycznie należy W widoku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-19 18:36:12
Polecam, abyś odwiedził bloga Ryana i przeczytał: "upraszczanie i sprzątanie widoków w KnockoutJS", jeśli tego nie zrobiłeś...
Http://www.knockmeout.net/2011/08/simplifying-and-cleaning-up-views-in.html
Wyjaśnia kilka fajnych sposobów na refaktoryzację kodu, aby nie zaśmiecać kodu html i utrzymać go bardziej czystym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-25 20:12:27
Alternatywą dla dostawcy wiązań sugerowanego w wybranej odpowiedzi jest nokaut .unobtrusiveBindingProvider , który jest "dyskretnym, opartym na konwencji dostawcą wiązań dla Knockout JS, który umożliwia czyste oddzielenie HTML i Knockout databindings".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-08 09:00:00