2012-05-28 2 views
5

KnockoutJS действительно здорово использовать до сих пор, но я новичок в фреймворке. Я пытаюсь создать интерфейс с вкладками, например. 4 ссылки и общая область отображения. Нажатие на ссылку использует систему шаблонов для нокаутов и переключит шаблон. Это отлично работает, но я хочу добавить некоторую анимацию между переходом шаблона.Knockoutjs - Переходы между динамическим переключением шаблонов?

Как это сделать? Я немного читал об этом раньше, чем в Remove/afterAd, но это, похоже, применимо только к наблюдаемым массивам. Я знаю, что KnockoutJS поддерживает анимацию/пользовательские привязки (я использую их более прямо для других элементов на моей странице).

Если мой весь подход неверен, есть ли лучший способ сделать интерфейс с вкладками, чтобы легко получить переходы?

Вот мой код прямо сейчас.

HTML-:

<div class="Page"> 
    <span data-bind="template: {name: current_page()}"></span> 
</div> 
<script type="text/html" id="Home"> 
    <!-- Home content --> 
</script> 
<script type="text/html" id="Tab1"> 
    <!-- Tab1 content --> 
</script> 

Javascript (KNOCKOUT в ViewModel):

this.current_page = ko.observable("Home") 
//later on... 
this.current_page("Tab1"); 

ответ

9

Вы можете использовать afterRender свойство template binding:

<span data-bind="template: {name: current_page(), afterRender: animatePageChange }"></span> 

.., а затем на ваша модель просмотра вы можете добавить любую анимацию, которую вы представляете:

animatePageChange: function() { $('#content').hide(); $('#content').fadeIn(3000); } 

Я поставил вместе простой демо на http://jsfiddle.net/unklefolk/v3JMS/1/

+3

Будет ли чистый способ сделать это с помощью пользовательской привязки? Я видел привязки «fadeVisible» и «slideVisible», но проблема с их использованием в мастере/рабочем процессе заключается в том, что вы хотите показывать только новый шаблон после того, как текущий шаблон был скрыт. –

+1

Отличный ответ и благодарность за jsFiddle. Я добавил немного простой логики переключения, поэтому вы можете продолжать нажимать кнопку, чтобы увидеть переход несколько раз, не перезагружая страницу. Обновлен jsFiddle здесь: http://jsfiddle.net/v3JMS/12/ – ClearCloud8

+1

@ ClearCloud8, обновленные внешние ресурсы на этом [jsfiddle] (http://jsfiddle.net/v3JMS/52/) –

Смежные вопросы