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?

Author: Brett Postin, 2012-11-19

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 .

 21
Author: Michael Berkompas,
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/

 16
Author: Anders,
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.

 5
Author: Mike Bell,
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.

 4
Author: Peter Goodheart,
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".

 1
Author: Steven Bey,
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