【发布时间】:2019-09-27 09:46:54
【问题描述】:
我有一个 Knockout 模型,其中包含一个 bool observable 和一个包含 bool observable 的对象列表。
我有自定义绑定 iCheckedSys,用于模型中的 bool,以使用 iCheck,自定义绑定 iCheckedPrimary 使用 iCheck,用于模型列表中对象中的 bool。
iCheckedSys 功能正确,valueAccessor() 返回 observable。
但是在列表中,valueAccessor() 在 iCheckedPrimary 中返回 false。
如果我只对列表对象使用复选框,它就可以正常工作。
如何让 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>
【问题讨论】:
标签: javascript html asp.net-mvc knockout.js icheck