敲除客户绑定 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
可观察,则必须这样做。
我为 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
可观察,则必须这样做。