Knockoutjs: параметр индекса всегда равен 0 при обратном вызове beforeRemove привязки foreach

#knockout.js

#knockout.js

Вопрос:

Согласно документации, beforeRemove обратный вызов в foreach привязке предоставит следующие параметры для вашего обратного вызова:

  1. В документ добавляется узел DOM
  2. Индекс добавленного массива
  3. элемент Добавленный элемент массива

Но я всегда получаю 0 в index параметре моей функции обратного вызова. Может кто-нибудь сказать мне, что не так? Вот код:

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

Ответ №1:

Похоже на ошибку в knockout 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> 

Комментарии:

1. Я вижу, он работает правильно с этой версией. Спасибо.