代码之家  ›  专栏  ›  技术社区  ›  Animesh Kumar

Knockout的afterAdd回调中的fadeIn()

  •  1
  • Animesh Kumar  · 技术社区  · 6 年前

    我在努力学习 foreach公司 $(element).fadeIn(500) 下面代码中的行不起作用:

    ko.applyBindings({
            myItems: ko.observableArray([ 'A', 'B', 'C' ]),
            FadeIn: function(element, index, item) {
              if(element.nodeType == 1){
                $(element).fadeIn(500);
              }
            },
            addItem: function() { this.myItems.push('New item'); }
        });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
    
    <ul data-bind="foreach: { data: myItems, afterAdd: FadeIn }">
        <li data-bind="text: $data"></li>
    </ul>
     
    <button data-bind="click: addItem">Add</button>

    法丹

    代码笔-> https://codepen.io/anon/pen/ejxeBr

    1 回复  |  直到 6 年前
        1
  •  2
  •   T.J. Crowder    6 年前

    因为你的元素没有被隐藏。把它改成

    $(element).hide().fadeIn(500);
    // --------^^^^^^^
    

    …或设置 style="display: none" afterAdd 电话)。

    var count = 0;
    ko.applyBindings({
      myItems: ko.observableArray(['A', 'B', 'C']),
      FadeIn: function(element, index, item) {
        if (element.nodeType == 1) {
          $(element).hide().fadeIn(500);
        }
      },
      addItem: function() {
        this.myItems.push('New item');
      }
    });
    <ul data-bind="foreach: { data: myItems, afterAdd: FadeIn }">
      <li data-bind="text: $data"></li>
    </ul>
    
    <button data-bind="click: addItem">Add</button>
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>