2016-04-26 3 views
1

Мне нужно вызвать одну внешнюю функцию прокрутки только в том случае, если внутренняя высота div больше внешней высоты div с помощью обработчиков пользовательских привязок нокаутом.Нокирование пользовательских привязок с моей настраиваемой функцией

Как я могу достичь этого с помощью своего пользовательского кода каждый раз.

HTML-код:

<div class="ModifiedNotesListSection" style="height:300px;"> 
    <div class="Innerdiv" data-bind="EnscrollActive:{}">some dynamiic Content</div> 
</div> 

Нокаут связывание:

ko.bindingHandlers.EnscrollActive = { 
      init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
       var ActualHeight = $(element).height(); 
       var ParentHeight = $(element).parents(".ModifiedNotesListSection").height(); 

        if (ActualHeight > ParentHeight) { 
         $(element).parents(".ModifiedNotesListSection").enscroll({ 
          verticalTrackClass: 'track4', 
          verticalHandleClass: 'handle4', 
          minScrollbarLength: 28 
         }); 
        } 
      } 
     }; 

Примечание Вместо этого метода enscroll, Вы можете написать любой JQuery добавить метод класса внутри моего, если условия.

+0

Вам нужно, чтобы пользовательская привязка выполнялась каждый раз, когда высота любого из элементов div изменяется, правильно? – elbecita

+0

@elbecita: Да, точно. – Rayudu

+0

Что вызывает изменение высоты элемента? – Tomalak

ответ

0

В конце вы хотите отслеживать изменение высоты элемента div и делать некоторые вещи, если высота внутреннего div больше внешней. «Уродливая» часть должна быть уведомлена каждый раз, когда высота элементов div изменяется, а для нокаута для этого нет решения из коробки. . :(

Вы собираетесь нужно закодировать что-то, чтобы отслеживать высоту элемента DOM каждый раз, когда X Проверьте эти ответы о том, как это сделать: https://stackoverflow.com/a/9628472/4067893

И потом, вы можете

  • выполнить ваш enscroll fn прямо в этом коде без необходимости иметь привязку к knckout
  • или используя пользовательскую привязку: поместите код, который проверяет высоту элементов div внутри пользовательского связывания init fn. Или используйте наблюдаемое, что чан каждый раз, когда высота элементов div изменяется и отправляется на привязку (data-bind="EnscrollActive: yourObservable"). В последнем случае вам нужно будет использовать update fn пользовательской привязки.

Надеюсь, это поможет.

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