У меня есть флажок, привязанный к свойству на моем объекте, используемом в моем наблюдаемом массиве. Я не могу корректно обновлять флажки при нажатии. Значение не устанавливается правильно, и флажок не снимается, когда я нажимаю на него. В примерах привязки есть свойство непосредственно в ViewModel, а не свойство объекта, используемого внутри ViewModel. Может ли кто-нибудь пролить свет на то, как заставить это работать?Нокаут JS Флажок привязки не обновляется правильно
<tbody id="StatusGrid" data-bind="foreach:{data: Statuses, as: 'status'}">
<tr data-bind="attr: { index: $index }" style="padding-bottom:5px;">
<td style="padding-bottom:5px;">
<input class="statusID" data-bind="value: status.StatusID, visible: status.ShowID, attr: { name: 'Statuses[' + $index() + '].StatusID'}" />
</td>
<td style="padding-bottom:5px;">
<input class="description" data-bind="value: status.Description, attr: { name: 'Statuses[' + $index() + '].Description'}" />
</td>
<td style="padding-bottom:5px;">
<input type="checkbox" class="active" data-bind="value: status.Active, checked: status.Active, click: $parent.updateCheckbox, attr: { name: 'Statuses[' + $index() + '].Active'}" />
</td>
<td style="padding-bottom:5px;">
<input type="button" data-bind="click: $parent.removeStatus, visible: status.IsNew" value="Remove" />
</td>
</tr>
</tbody>
//////KNOCKOUT//////
var _viewModel = new ViewModel();
function status(index) {
this.StatusID = ko.observable('');
this.Description = ko.observable('');
this.Index = ko.observable(index);
this.Active = ko.observable(true);
this.ShowID = ko.observable(false);
this.IsNew = ko.observable(true);
return this;
};
function ViewModel() {
var self = this;
self.Statuses = ko.observableArray(convertJSONToKoObservableObject());
//self.Statuses.push(new status(0));
//Ko Functions
self.addStatus = function() {
var index = $('#StatusGrid tr:last').attr('index');
self.Statuses.push(new status(index + 1));
}
self.removeStatus = function (row) {
self.Statuses.remove(row);
}
self.updateCheckbox = function (row) {
var index = row.Index();
var checkbox = $('#StatusGrid tr').eq(index).find('[type=checkbox]');
if ($(checkbox).is(":checked")) {
$(checkbox).attr('checked', false);
row.Index(false);
}
else {
$(checkbox).attr('checked', true);
row.index(true);
}
return true;
}
}
//FUNCTION
function convertJSONToKoObservableObject() {
var json = JSON.parse('@Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model.Statuses))');
var ret = [];
var index = 0;
$.each(json, function (i, obj) {
var newOBJ = new status(index);
newOBJ.StatusID = ko.observable(obj["StatusID"]);
newOBJ.Description = ko.observable(obj["Description"]);
newOBJ.Active = ko.observable(obj["Active"]);
newOBJ.Index = ko.observable(index);
newOBJ.ShowID = ko.observable(false);
newOBJ.IsNew = ko.observable(false);
ret.push(newOBJ);
index++;
});
return ret;
}
//BIND UP!
ko.applyBindings(_viewModel);
Я обновил привязку, удалив значение: и он начал безостановочно проверять/проверять флажок. Однако теперь значение не возвращается к моему контроллеру. Если вы заметили привязки attr {name}, он следит за схемой привязки mvc для модели mvc для сохранения значений для обратной передачи. Все остальные работают нормально, но появляется удаление значения: привязка заставила его потерять значения в сообщении формы. – user1732364