0

我想创建一个由 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/

4

1 回答 1

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();

正如您所看到的,这会遍历员工并创建一个包含所有所属事务的 Transactions 属性。

并且认为:

<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。实际上,进行分组过程的唯一事情是重建员工(作为根)和事务(作为叶子)的层次结构。

我希望它有所帮助。

于 2013-05-31T11:39:36.477 回答