我想创建一个由Soid
过滤的列表基本上我有2种名单:1名员工,2项交易
Employees got EmpID and Name
Transactions got `ID` , EmpID , and TransDate
我想过滤这样的事情:data-bind="foreach: $data.Transactions(EmpID )">
(
使用自定义绑定,是否可能?
类似这样的事情
<table>
<tbody data-bind="foreach: Employees, visible: Employees().length > 0">
<tr>
<td class="centerdata" data-bind="text: ID"></td>
<td class="centerdata" data-bind="text: Name"></td>
<td>
<table>
<tbody data-bind="foreach: $data.Transactions">
<tr>
<td data-bind="text:TransDate"></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
所以,这将工作:
var employees = [{EmpID : 0, Name: 'John' }];
var transactions = [{ID : 1, TransDate: '1/1/2013', EmployeeID :0}];
ko.utils.arrayForEach(employees , function(e) {
e.Transactions = ko.utils.arrayFilter(transactions, function(t){
return t.EmployeeID == e.EmpID;
});
});
var VM = function(){
var self = this;
self.Employees = employees;
self.getEmployee = function(empID) {
for(var index = 0; index; self.Employees.length; index++ ) {
if(self.Employees[index].EmpID == empID)
return self.Employees[index]
}
return null;
};
};
var vm = new VM();
正如您所见,这会循环通过员工并创建一个包含所有所有交易的交易属性。
那个观点:
<table>
<tbody data-bind="foreach: Employees, visible: Employees.length > 0">
<tr>
<td class="centerdata" data-bind="text: ID"></td>
<td class="centerdata" data-bind="text: Name"></td>
<td>
<table>
<tbody data-bind="foreach: $data.Transactions">
<tr>
<td data-bind="text:TransDate"></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
您无需创建自定义绑定即可按员工对转化进行分组。 因为分组过程已经由foreach和arrayFilter完成。 所以,没有必要通过EmpID。 实际上,进行分组过程的唯一方法是重构Employees(作为根)和Transactions(作为叶子)的层次结构。
我希望它有所帮助。