【问题标题】:Knockoutjs: index param is always 0 in beforeRemove callback of foreach bindingKnockoutjs:索引参数在 foreach 绑定的 beforeRemove 回调中始终为 0
【发布时间】:2021-05-01 12:56:24
【问题描述】:

根据文档,foreach 绑定中的beforeRemovecallback 将为您的回调提供以下参数:

  1. 一个 DOM 节点被添加到文档中
  2. 添加数组的索引
  3. element 添加的数组元素

但我的回调函数的 index 参数中总是得到 0。有人可以告诉我怎么了?代码如下:

https://codepen.io/gxzzin/pen/KKNPKeO?editors=1010

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    看起来像是淘汰赛 3.5.0 中的一个错误。相同的代码适用于 3.4.2 版本,请看下面的缩写示例:

    function RootViewModel(){
      var self = this;
      self.Items = ko.observableArray([1, 2, 3, 4, 5]);
    
      self.BeforeRemove = function(element, ind, item) {
        console.log("Index: " + ind);
        $(element).remove();
      };
    };
    
    ko.applyBindings(new RootViewModel());
    <script src="https://cdnjs.cloudflare.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>
    <div class="container p-5">
    
      <button data-bind="click: function () { Items.push(Items().length + 1) }">Add</button>
    
      <ul data-bind="foreach: { data: Items, beforeRemove: BeforeRemove }">
        <li data-bind="text: $data, click: function (i) { $root.Items.remove(i) }"></li>
      </ul>
    
    </div>

    【讨论】:

    • 我明白了,它在那个版本上工作正常。谢谢。
    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2016-09-22
    • 2013-04-03
    相关资源
    最近更新 更多