2012-10-31 14 views

Odpowiedz

124

Oto prosta sztuczka. Po prostu ustaw początkowo element główny i ustaw widoczne powiązanie na true.

<div style="display: none;" data-bind="visible: true"> 
    <!-- the rest of your stuff --> 
</div> 

W miarę renderowania, zanim nokaut wykona swoje zadanie, będzie on początkowo ukryty. Po zastosowaniu powiązań, nokaut będzie nadpisywać styl i sprawi, że będzie widoczny.


Alternatywnie możesz rzucić widok na blok skryptu i utworzyć jego instancję za pomocą szablonu. Bloki skryptów nie zostaną wyrenderowane, ale będą widoczne, gdy nokaut wyświetli szablon.

<!-- ko template: 'myView' --><!-- /ko --> 
<script id="myView" type="text/html"> 
    <!-- the rest of your stuff --> 
</script> 
+7

Podoba mi się to lepiej niż rozwiązanie Toma, ponieważ polega tylko na nokautowaniu, aby odkryć kod HTML. – Tyrsius

+0

dokładnie to, co skończyłem robić (następnie sprawdzone tutaj i to samo rozwiązanie; S) – shenku

+0

Bardzo dobre rozwiązanie! Dzięki. –

1

Owiń html w coś takiego -

<div id="hideme" style="display:none"> 
</div> 

Następnie w JavaScripcie, dodaj następującą linię jquery Po zastosować wiązania -

$('#hideme').show(); 

Jest to najprostsza metoda, która Znalazłem to działa. Mógłbyś to zrobić z niektórymi powiązaniami typu "knockout", ale tracisz gwarantowane terminy, ponieważ nie możesz kontrolować wykonywania powiązań.

2

Ponieważ zachowanie chcesz często waha się od strony do strony - to, co robię w moim układzie pliku/szablonu (ASP.NET).

<div class="ko-unbound" data-bind="css: { 'ko-unbound': false, 'ko-bound': true }"> 
    @RenderBody() 
</div> 

Gdy strona jest związana:

  • ko-unbound klasy są usunięte ze strony (początkowo dodanej z atrybutem class).
  • ko-bound klasa zostanie dodana do strony.

Następnie na stronie, na której niepożądane treści stanowią problem, mogę dostosować ustawienia css do pokazywania lub ukrywania elementów na podstawie tych dwóch klas. Używam również tej techniki, aby pokazać "ładowanie" obrazu lub nałożyć minimalną wysokość elementu.

Podczas testowania, przy stosowaniu wiązań dodam limit czasu, dzięki czemu mogę zobaczyć lampę błyskową.

setTimeout(function() 
{ 
    ko.applyBindings(RR.VM); 

}, 300); 
+0

Jest to stosunkowo przyjemne rozwiązanie, z wieloma obietnicami, choć byłoby ładniej niż wielokrotnego użytku. Musielibyśmy jednak upewnić się, że jest to pierwsza wiążąca ocena. –

+0

Podobnie jak trik setTimeout(), aby łatwo to zobaczyć! słodki –

+0

@KarlP nie słodkie, jeśli zapomnisz go usunąć lol –

0

Innym rozwiązaniem, które znalazłem here

<div id="binding-start" style="visibility:hidden" data-bind="attr: { 'style': 'visibility:visible' }" /> 

Ma to tę zaletę lub wadę - w zależności od potrzeb - że miejsce zostanie zarezerwowane dla ukrytych treści. Strona nie "przeskoczy", gdy zostaną zastosowane wiązania.

Powiązane problemy