我有一个带有标题的表(#,用户名,用户姓),当用户从复选框列表中选择用户名时,正在执行淘汰foreach循环以添加行.这是我的小提琴.
HTML
<div>
<table class="table table-bordered">
<thead>
<th>#</th>
<th>User Name</th>
<th>User Surname</th>
</thead>
<tbody data-bind="foreach: users">
<tr data-bind="if: userselected">
<!-- The table row number -->
<td data-bind="text: $index() + 1"></td>
<td data-bind="text: username"></td>
<td data-bind="text: usersurname"></td>
</tr>
</tbody>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
JS
var myViewModel = {
users: ko.observableArray([{
username: 'Name 1',
usersurname: 'Surname 1',
userselected: ko.observable(false)
}, {
username: 'Name 2',
usersurname: 'Surname 2',
userselected: ko.observable(false)
}, {
username: 'Name 3',
usersurname: 'Surname 3',
userselected: ko.observable(false)
}])
};
$(document).ready(function () {
//Bind View model
ko.applyBindings(myViewModel);
});
Run Code Online (Sandbox Code Playgroud)
当用户选择用户1和3时,问题就出现了$ index()+ 1不适用于行号.
我需要一种动态设置行号的方法.
提前致谢.
nem*_*esv 14
我会创建一个计算的observable,我在那里进行过滤.然后$index()将提供正确的rownumbers:
因此,selectedUsers为您的新属性添加myViewModel:
myViewModel.selectedUsers = ko.computed(function () {
return ko.utils.arrayFilter(myViewModel.users(), function (item) {
return item.userselected();
});
});
Run Code Online (Sandbox Code Playgroud)
然后在你的表中绑定它:
<tbody data-bind="foreach: selectedUsers">
<tr>
<!-- The table row number -->
<td data-bind="text: $index() + 1"></td>
<td data-bind="text: username"></td>
<td data-bind="text: usersurname"></td>
</tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)
演示JSFiddle.