【发布时间】:2017-06-29 12:22:21
【问题描述】:
当点击顶部列表中的元素时进行选择。当您单击底部元素时,它会从列表中删除。但是,顶部列表上的复选框不是错误的。我该如何解决它。
function User(data) {
this.userName = ko.observable(data.userName);
this.selected = ko.observable(data.selected);
}
var dataSource = [
new User({
userName: "test1",
selected: false
}),
new User({
userName: "test2",
selected: false
})
];
function UsersViewModel() {
var self = this;
//initial data may have two IEnumerables
self.AllUsers = ko.observableArray(dataSource);
self.SelectedUsers = ko.observableArray([]);
self.selectedUserNames = ko.observableArray([]);
remove: function myfunction() {
SelectedUsers().remove(this);
}
self.selectedUserNames.subscribe(function(newValue) {
var newSelectedUserNames = newValue;
var newSelectedUsers = [];
ko.utils.arrayForEach(newSelectedUserNames, function(userName) {
var selectedUser = ko.utils.arrayFirst(self.AllUsers(), function(user) {
return (user.userName() === userName);
});
newSelectedUsers.push(selectedUser);
});
self.SelectedUsers(newSelectedUsers);
});
self.remove = function(e) {
self.SelectedUsers.remove(e);
}
}
ko.applyBindings(new UsersViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Available
<ul data-bind="foreach: AllUsers, visible: AllUsers().length > 0">
<li>
<!--<div data-bind="click: $parent.SelectedUser">-->
<input type="checkbox" name="checkedUser" data-bind="value: userName, checked: $root.selectedUserNames" />
<span data-bind="text: userName"></span>
<!--</div>-->
</li>
</ul>
<br />Selected
<ul data-bind="foreach: SelectedUsers, visible: SelectedUsers().length > 0">
<li data-bind="click: $parent.remove">
<span data-bind="text: userName"></span>
</li>
</ul>
【问题讨论】:
-
下面的答案是否解决了问题?
标签: javascript ajax arraylist knockout.js