使用我的自定义函数

时间:2016-04-26 11:07:48

标签: jquery knockout.js

我需要在内部div高度大于外部div高度时通过knockout自定义绑定处理程序调用一个外部滚动函数。

我怎样才能每次使用自定义代码实现此目的。

Html代码是:

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

Knockout绑定是:

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
                       });
                   }
           }
       };

注意:您可以在if条件中编写任何JQuery add class方法,而不是这个enscroll方法。

1 个答案:

答案 0 :(得分:0)

最后,如果内部div的高度大于外部div的高度,则需要跟踪div元素的高度变化并执行一些操作。 &#34;丑陋&#34;每次div元素高度变化时都会通知part,并且knockout没有开箱即用的解决方案。 :(

您需要编写一些代码来每隔X次跟踪DOM元素的高度。请查看以下答案:https://stackoverflow.com/a/9628472/4067893

然后,你可以

  • 直接在该代码中执行enscroll fn,而无需自定义knlockout绑定
  • 或使用自定义绑定:将检查div元素高度的代码放在自定义绑定init fn中。或者使用一个observable,每当div元素的高度发生变化时它就会发生变化并将其发送到绑定(data-bind="EnscrollActive: yourObservable")。在最后一种情况下,您需要使用自定义绑定的update fn。

我希望它有所帮助。