2013-08-30 12 views
6

Szukałem Angular.js i Knockout.js jako potencjalnych rozwiązań front-end. Uwielbiam samouczki i dokumentację Knockout. Jednak nie jest dla mnie jasne, w jaki sposób Knockout obsługuje szablony większych aplikacji.Knockout.js Struktura projektu

Na przykład w kątowa, byś zrobić główny szablon takiego:

<div id="content" class="container" ng-view></div> 

I wtedy to będzie wypełniana przez przez „podszablonów”, na przykład:

<p>This is a partial</p> 

moje pytanie czy Knockout wspiera tę samą koncepcję? Wygląda na to, że Knockout chce użyć szablonu "foreach" (http://knockoutjs.com/documentation/template-binding.html). Jednak to nie rozwiązuje kwestii podziału kodu HTML na mniejsze segmenty.

Czy jestem na dobrej drodze? Czy jest coś, czego mi brakuje w odniesieniu do struktury katalogów Knockout?

EDYCJA: Mam dobre opinie. Rozumiem, że Knockout nie ma wbudowanego rozwiązania szablonowego. Jeśli to prawda, prawdopodobnie będę potrzebował Angular.

+0

Z Knockoutem Ty jesteś odpowiedzialny za strukturę aplikacji (tak jak w natywnym rozwoju JS). Knockout rozwiązuje wiązanie danych, które bardzo pomaga w strukturze warstwy interfejsu użytkownika w aplikacji - ale pozostawia to tobie całkowicie strukturę reszty aplikacji (routing, szablon, cząstki, struktura logiki biznesowej) - pytanie "jak struktura aplikacji internetowej "jest bardzo ogólna, zależy od przypadków użycia i jest poza zakresem SO. –

Odpowiedz

11

Knockout nie jest bezpośrednią konkurencją dla frameworka, jest raczej mniejszą biblioteką do wiązania danych w stylu MVVM niż pełna struktura do tworzenia aplikacji z jedną stroną.

Proszę spojrzeć na Durandal (http://durandaljs.com/), który jest oparty na Knockout i zapewnia kompozycję opartą na zalecanej strukturze projektu i wiele innych części dla pomyślnej implementacji aplikacji z jedną stroną (router, dialogi, oprzyrządowanie, proces budowania, wsparcie dla amd etc ...) podobne do Angular lub Ember.

+3

+1 do omawiania różnych domen problemów Knockout (wiązanie danych i światło MVVM, musisz skonstruować własny kod) i Angular (Whole framework) próba rozwiązania. –

+0

Dobre punkty. Moim zamiarem było użycie Bootstrap 3 i Snap.js oraz pewnego rodzaju front-framework. Pomyślałem, że Angular będzie na to lepszy, ale dokumentacja jest na pół upieczona w porównaniu z KO. Przekroczenie krzywej uczenia się było zmaganiem. –

+0

@DiodeDan Czy widziałeś egghead.io? –

0

Możesz osiągnąć to, co chcesz, korzystając z szablonów podrzędnych, które można traktować jako częściowe widoki.

Na przykład:

<script type="text/html" id="main-template"> 

    some content... 

    <!--ko template: {name: 'sub-template-1'} --><!-- /ko --> 

    some more content... 

    <!--ko template: {name: 'sub-template-2'} --><!-- /ko --> 

</script> 

I nie będziesz musiał załadować szablon główny, jak:

<!-- ko template: { name: 'main-template' } --><!-- /ko --> 
+0

Używanie szablonów skryptów nie jest już zalecane w przypadku nokautu. Nie używaj ich. Zalecają użycie natywnego szablonu opartego na DOM opartego na Knockout (tj. Powiązanie foreach, if, with, itp.) Zamiast jQuery.tmpl lub dowolnego innego silnika szablonowego opartego na łańcuchach. Również text.html nie jest poprawną wartością dla typu atrybutu – XGreen

+0

Typ.html był literówką - zaktualizowałem wpis. O ile twoje oświadczenie może mieć rację (nie widzę nigdzie na stronie KO Doc mówiąc, że powinieneś używać tylko natywnego templowania opartego na DOM) chciałem tylko pokazać, jak zaimplementować pod-szablony za pomocą tego, co potrafi KO.js - nie inne ramy. –

+4

@XGreen Wymagane cytowanie, nie mogę znaleźć żadnej wzmianki o "nie używać szablonów skryptów" w dokumentacji - rozwijanie umysłu? –

2

knockout AMD pomocników Zobacz Ryan Niemeyera project on github

Z Readme:

Ta wtyczka została zaprojektowana jako lekkie i elastyczne rozwiązanie dla pracującej z modułami AMD w Knockout.js. Zapewnia dwie kluczowe funkcje:

1 - Rozszerza domyślny silnik szablonów, umożliwiając załadowanie zewnętrznych szablonów za pomocą wtyczki tekstowej modułu ładowania AMD. Umożliwia to tworzenie szablonów w pojedynczych plikach HTML i wstawianie ich zgodnie z potrzebami za pomocą nazwy (najlepiej w przypadku, gdy szablony są zawarte w zoptymalizowanym pliku ).

2- Tworzy wiązanie modułu, które zapewnia elastyczny sposób ładowania danych z modułu AMD i wiąże go z szablonem lub z szablonem anonimowym/wbudowanym .

0

Nie podobało mi się jednoznaczne powiązanie z szablonem w KO, było wiele ciągów wszędzie. Więc stworzyłem konwencję nad biblioteką konfiguracji

można zainstalować przy użyciu Nuget

Install-Package Knockout.BindingConventions 

Powiedzmy, że masz element this.selectedCustomer od modelu, a jego zawartość jest typu CustomerViewModel. Z mojej bibliotece Ten fragment kodu html

<div data-name="selectedCustomer"></div> 

wiązałby div do szablonu o nazwie „CustomerView” http://jsfiddle.net/xJL7u/5/

Posiada kilka innych konwencji zbyt przycisków itp https://github.com/AndersMalmgren/Knockout.BindingConventions/wiki

Stworzyłem także zewnętrzny silnik szablonów, który wykorzystuje powyższą strukturę razem, są one naprawdę wydajne:

Install-Package Knockout.Bootstrap 

https://github.com/AndersMalmgren/Knockout.Bootstrap/wiki

Powiązane problemy