Действительно странная ошибка нокаута у меня есть. Это довольно сложный сценарий, поэтому, пожалуйста, эта скрипка:Нокаут, свойство коллекции становится null, когда я пытаюсь удалить один элемент из него, если в нем есть несколько элементов?
По существу у меня есть двойная вложенная коллекция, первая коллекция FishMeasurements
содержит коллекцию объектов, имеющие информацию видов, связанную с ним, а также коллекцией Measurements
, которые содержат все измерения, связанные с этим видом.
Теперь, когда я пытаюсь и удалять элементы из вложенной коллекции в этом формате HTML: Функция измерения
<!-- ko foreach: FishMeasurements() -->
<h3><span data-bind="text: SpeciesName"></span><span data-bind="text: SpeciesId" style="display: none;"></span></h3>
<table class="table table-striped">
<thead>
<tr>
<th>Length</th>
<th>Count</th>
<th>Weight</th>
<th>Fish Id</th>
<th> </th>
</tr>
</thead>
<tbody data-bind="foreach: Measurements()">
<tr>
<td><span data-bind="text: LengthInMillimeters"></span></td>
<td><span data-bind="text: Count"></span></td>
<td><span data-bind="text: WeightInPounds"></span></td>
<td><span data-bind="text: FishCode"></span></td>
<td><a href="#" data-bind="click: function() { $root.removeMeasurement($data, $index); }">Remove</a></td>
</tr>
</tbody>
</table>
<!-- /ko -->
Средство удаления не работает, когда Measurements
коллекция имеет более одного объекта. Я нажимаю на ссылку удалить, и он выдает ошибку, которая говорит:
VM617:163 Uncaught TypeError: Cannot read property 'Measurements' of null(…)
Странная вещь об этом, если бы я только добавить один элемент в коллекцию измерения, удаления кнопки работают нормально, но как только я добавьте несколько измерений, если я нажму «удалить» на любом элементе таблицы, но в первой строке, эта ошибка будет сгенерирована. Однако, если я щелкнул первый элемент в таблице для каждого вида, нет ошибки, и все записи будут удалены!
Что-то говорит мне, что его лечебные измерения, как один объект, а не коллекции, потому что он работает только на индексе 0. Но я не уверен, потому что в консоли я могу набрать:
mappedModel.FishMeasurements()[0].Measurements()[1]
И получить возвращается полный объект ko_mapping, поэтому он не равен нулю. Но по какой-то причине, когда я нажимаю кнопку «Удалить», он равен нулю. Пока существует только одно измерение для каждого вида, щелчок на удалении отлично работает, как только его больше ломается.
Что я делаю неправильно?
Посмотрите на обновление на мой ответ. Надеюсь, что помогает –