敲除客户绑定 valueAccessor() 不是函数

Knockout customer binding valueAccessor() is not a function

我为 icheck 插件创建了一个客户绑定,我想在选中复选框时更新绑定对象。

这是我的视图模型

            var userViewModel = function () {
            var self = this;
            self.UserFullData = ko.observable();
            self.loadObject = function () {
                $.ajax({
                    type: 'GET',
                    contentType: 'application/json',
                    url: '../UserData.do/GetUser?id=1',
                    success: function (result) {
                        var data = JSON.parse(result);
                        if (data) {

                            self.UserFullData(data);  //data from ajax
                        }
                    }
                });
            };

Ajax数据:

{"User":{"ID":1,"HumanID":1,"LoginName":"cccc","LoginPass":"eeee","PermissionID":1,"DepartmentID":8,"Name":"cz","Sex":1,"SexStr":null,"EName":"cheo","NickName":"b","Company":null,"Address":null,"Email":null,"Country":0,"Province":0,"City":0,"Area":0,"PersonType":0,"Mobile":null,"PhoneNumber":"123456","MSN":null,"Fax":null,"Extension":null,"LastLoginTime":"0001-01-01T00:00:00","Position":null},"PermissionGroup":[{"ID":1,"Title":"a","View":false,"Update":true}]}

HTML :

'View' 是 FullUserData.PermissionGroup

数组中的一个 属性
     <div class="box" data-bind="with:UserFullData">
 <div data-bind="foreach:PermissionGroup">
    <input type="checkbox" class="minimal" style="position: absolute; opacity: 0;" data-bind="iCheckBinding:View">

以下为客户绑定功能:

            ko.bindingHandlers.iCheckBinding = {
            init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
                $(element).iCheck({
                    checkboxClass: 'icheckbox_minimal-blue',
                    radioClass: 'iradio_minimal-blue'
                });
                var value = valueAccessor();
                var valueUnwrapped = ko.unwrap(value);
                if (valueUnwrapped) {
                    $(element).iCheck('check');
                }
                else {
                    $(element).iCheck('uncheck');
                }


                $(element).on('ifChanged', function () {
                    var newValue = this.checked;
                    var observable = valueAccessor();
                    //observable always not a function
                    observable(newValue);

                });
            }
        };

现在其他一切对我来说都很好..只是 observable(newValue) 不是一个函数让我感到困惑,我无法更新我的对象。

有人知道吗?

您期望 View 成为可观察的,但您没有采取任何措施使其成为可观察的。该代码中唯一可观察到的是 UserFullData,您在此处设置:

self.UserFullData = ko.observable();

您的 success 函数中的代码没有做任何事情 inside observable:

success: function (result) {
    var data = JSON.parse(result);
    if (data) {
        self.UserFullData(data);  //data from ajax
    }
}

如果您希望该结构中的 View 可观察,则必须这样做。