Javascript Knockout.js-如何在单击所选项目时取消选中available item observable
单击顶部列表中的元素时进行选择。单击底部元素时,它将从列表中删除。但是,顶部列表上的复选框不是false。我怎样才能修好它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(){
功能用户(数据){
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())代码>
可用
-
已选定