Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockout.js-如何在单击所选项目时取消选中available item observable_Javascript_Ajax_Arraylist_Knockout.js - Fatal编程技术网

Javascript Knockout.js-如何在单击所选项目时取消选中available item observable

Javascript Knockout.js-如何在单击所选项目时取消选中available item observable,javascript,ajax,arraylist,knockout.js,Javascript,Ajax,Arraylist,Knockout.js,单击顶部列表中的元素时进行选择。单击底部元素时,它将从列表中删除。但是,顶部列表上的复选框不是false。我怎样才能修好它 功能用户(数据){ this.userName=ko.observable(data.userName); this.selected=ko.可观察(data.selected); } 变量数据源=[ 新用户({ 用户名:“test1”, 所选:false }), 新用户({ 用户名:“test2”, 所选:false }) ]; 函数UsersViewModel(){

单击顶部列表中的元素时进行选择。单击底部元素时,它将从列表中删除。但是,顶部列表上的复选框不是false。我怎样才能修好它

功能用户(数据){
this.userName=ko.observable(data.userName);
this.selected=ko.可观察(data.selected);
}
变量数据源=[
新用户({
用户名:“test1”,
所选:false
}),
新用户({
用户名:“test2”,
所选:false
})
];
函数UsersViewModel(){
var self=这个;
//初始数据可能有两个IEnumerable
self.alluser=ko.observearray(数据源);
self.SelectedUsers=ko.observableArray([]);
self.selectedUserNames=ko.observableArray([]);
删除:函数myfunction(){
SelectedUsers()。删除(此项);
}
self.selectedUserNames.subscribe(函数(newValue)){
var newSelectedUserNames=newValue;
var newSelectedUsers=[];
ko.utils.arrayForEach(新选择的用户名、函数(用户名)){
var selectedUser=ko.utils.arrayFirst(self.AllUsers(),函数(用户){
返回(user.userName()==用户名);
});
newselecteduser.push(selectedUser);
});
自选用户(新用户);
});
self.remove=函数(e){
自选择用户。删除(e);
}
}
applyBindings(新的UsersViewModel())

可用

已选定

我有一段时间没有使用Knockout.js了,但您的问题似乎是
remove()
方法正在从
SelectedUsers
可观察对象中删除用户,而实际上您应该从
selectedUserNames
可观察对象中删除用户名

根据您设置绑定的方式,您将订阅可观察的
selectedUserNames
,并更新此订阅中可观察的
SelectedUsers
。这意味着,当您从
SelectedUsers
observable中删除用户时,订阅没有被调用,这解释了为什么您在删除用户名时没有看到相应的用户被取消选中

换言之,更改以下方法:

self.remove = function(e) {
  self.SelectedUsers.remove(e);
}
对此,请改为:

self.remove = function(e) {
  self.selectedUserNames.remove(e.userName());
}
下面是一个更新的示例,其中包含您的完整代码:

功能用户(数据){
this.userName=ko.observable(data.userName);
this.selected=ko.可观察(data.selected);
}
变量数据源=[
新用户({
用户名:“test1”,
所选:false
}),
新用户({
用户名:“test2”,
所选:false
})
];
函数UsersViewModel(){
var self=这个;
//初始数据可能有两个IEnumerable
self.alluser=ko.observearray(数据源);
self.SelectedUsers=ko.observableArray([]);
self.selectedUserNames=ko.observableArray([]);
self.selectedUserNames.subscribe(函数(newValue)){
var newSelectedUserNames=newValue;
var newSelectedUsers=[];
ko.utils.arrayForEach(新选择的用户名、函数(用户名)){
var selectedUser=ko.utils.arrayFirst(self.AllUsers(),函数(用户){
返回(user.userName()==用户名);
});
newselecteduser.push(selectedUser);
});
自选用户(新用户);
});
self.remove=函数(e){
self.selectedUserNames.remove(例如userName());
}
}
applyBindings(新的UsersViewModel())

可用

已选定

我有一段时间没有使用Knockout.js了,但您的问题似乎是
remove()
方法正在从
SelectedUsers
可观察对象中删除用户,而实际上您应该从
selectedUserNames
可观察对象中删除用户名

根据您设置绑定的方式,您将订阅可观察的
selectedUserNames
,并更新此订阅中可观察的
SelectedUsers
。这意味着,当您从
SelectedUsers
observable中删除用户时,订阅没有被调用,这解释了为什么您在删除用户名时没有看到相应的用户被取消选中

换言之,更改以下方法:

self.remove = function(e) {
  self.SelectedUsers.remove(e);
}
对此,请改为:

self.remove = function(e) {
  self.selectedUserNames.remove(e.userName());
}
下面是一个更新的示例,其中包含您的完整代码:

功能用户(数据){
this.userName=ko.observable(data.userName);
this.selected=ko.可观察(data.selected);
}
变量数据源=[
新用户({
用户名:“test1”,
所选:false
}),
新用户({
用户名:“test2”,
所选:false
})
];
函数UsersViewModel(){
var self=这个;
//初始数据可能有两个IEnumerable
self.alluser=ko.observearray(数据源);
self.SelectedUsers=ko.observableArray([]);
self.selectedUserNames=ko.observableArray([]);
self.selectedUserNames.subscribe(函数(newValue)){
var newSelectedUserNames=newValue;
var newSelectedUsers=[];
ko.utils.arrayForEach(新选择的用户名、函数(用户名)){
var selectedUser=ko.utils.arrayFirst(self.AllUsers(),函数(用户){
返回(user.userName()==用户名);
});
newselecteduser.push(selectedUser);
});
自选用户(新用户);
});
self.remove=函数(e){
self.selectedUserNames.remove(例如userName());
}
}
applyBindings(新的UsersViewModel())

可用

已选定