У меня есть модель Knockout, содержащая наблюдаемую bool и список объектов, которые содержат наблюдаемую bool.
У меня есть пользовательская привязка iCheckedSys
, для bool в модели, для работы с iCheck, и пользовательская привязка iCheckedPrimary
для работы с iCheck на bool в объектах в списке модели.
iCheckedSys
работает правильно, а valueAccessor()
возвращает наблюдаемое.
Однако в списке valueAccessor()
возвращает false в iCheckedPrimary
.
Если я просто использую флажок для списка объектов, он работает просто отлично.
Как мне заставить iCheck работать со списком объектов?
Большое спасибо.
<div class="form-horizontal no-margin form-border" data-bind="UserViewModel">
<label>
<input type="checkbox" data-bind="iChecked: IsSysAdmin">
</label>
<tbody data-bind="foreach: RolesList">
<td><input type="checkbox" data-bind="checked: IsPrimary" /></td>
</tbody>
</div>
<script>
var Role = function () {
var self = this;
self.ID = ko.observable();
self.IsPrimary = ko.observable();
};
var UserViewModel = function () {
var self = this;
self.ID = ko.observable(@Html.Raw(Json.Encode(Model.ID)));
self.IsSysAdmin = ko.observable(@Html.Raw(Json.Encode(Model.IsSysAdmin)));
self.RolesList = ko.observableArray();
ko.bindingHandlers.iChecked = {
init: function (element, valueAccessor) {
$(element).iCheck({
checkboxClass: "icheckbox_minimal-green",
radioClass: "iradio_minimal-green", increaseArea: "20%"
});
$(element).on('ifChanged', function () {
var observable = valueAccessor();
observable($(element)[0].checked);
});
},
update: function (element, valueAccessor) {
var value = ko.unwrap(valueAccessor());
if (value) {
$(element).iCheck('check');
} else {
$(element).iCheck('uncheck');
}
}
};
};
var viewModel = new UserViewModel();
ko.applyBindings(viewModel);
</script>