knockout.js пользовательская привязка foreach - с использованием идентификатора
Я хочу создать один список, который фильтруется по 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>
и это то, что я устал: http://jsfiddle.net/bxfXd/2237/
1 ответ
Итак, это будет работать:
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. Фактически, единственное, что делает процесс группировки, - это реконструирует иерархию сотрудников (как корни) и транзакций (как листья).
Я надеюсь, что это помогает.