for (var i = 0; i < 9; i++)
{
vm.icdCodes.push({Index:i, ID:'',DiagnosisCd: '' ,Description:ko.observable('')});
}
<tbody data-bind='foreach: $root.icdCodes'>
<tr>
<td>
<input type="text" class="icdCodeInput" list="icdcodes" data-bind="value: DiagnosisCd, event: { focusout: $root.dxCodeLostFocus}, attr: { id: 'icdCodeInput' + $index() }">
<datalist id="icdcodes" class="icdcodes">
</datalist>
<button type="button" class="btn btn-default btn-lg" data-bind=" click: $root.moveDxCodeUp, attr: { id: 'dxCodeUpButton' + $index() }">
<i class="icon-arrow-up"></i>
</button>
</td>
</tr>
</tbody>
vm.moveDxCodeUp = function (data) {
if (data.DiagnosisCd != "")
{
var currentDxCode = data;
var previousDxCode = vm.icdCodes()[data.Index - 1];
if (currentDxCode.Index > 0)
{
vm.icdCodes()[data.Index - 1] = currentDxCode;
vm.icdCodes()[data.Index] = previousDxCode;
var tempIndex = currentDxCode.Index;
currentDxCode.Index = previousDxCode.Index;
previousDxCode.Index = tempIndex;
}
}
В моем HTML я зацикливаюсь в наблюдаемом массиве icdCodes, чтобы добавить рядом с ним несколько datalist и смежных кнопок HTML 5. Кнопка при нажатии позволяет мне перемещать значение в текущем текстовом поле в текстовое поле, которое находится над ним. В первый раз, когда я нажимаю кнопку, значения меняются правильно. Но если я снова нажму кнопку, параметр data в функции movexCodeUp по-прежнему получит исходное значение (до обмена), а не значение, которое получило взаимозаменяемость после нажатия кнопки. Я также меняю значения в фактической наблюдаемой коллекции (icdCodes) в функции.Перехват события нокаутного щелчка, отправляющий неверные данные
Можете ли вы создать репрограммирование JSFiddle? Ваш код работает отлично: http://jsfiddle.net/JVahL/1/ – nemesv
Единственное различие между моим кодом и вашим состоит в том, что вы добавили одну строку vm.icdCodes.valueHasMutated(). Я не добавляю его. Это может быть причиной, я получаю старое значение после обмена значениями. Я добавлю эту строку и дам вам знать. Благодарю. – user2585299
vm.icdCodes.valueHasMutated() сделал трюк. Спасибо. Поскольку icdCodes является наблюдаемым массивом, почему нам нужно явно называть функцию valueHasMutated? Вы можете изменить свой комментарий, чтобы ответить, и я отметю его. – user2585299