knockout.js自定义绑定foreach-使用ID

knockout.js自定义绑定foreach-使用ID,knockout.js,ko-custom-binding,Knockout.js,Ko Custom Binding,我想创建一个由Soid过滤的列表 基本上我有两种清单:1个员工,2个交易 Employees got EmpID and Name Transactions got `ID` , EmpID , and TransDate 我需要这样的过滤器:databind=“foreach:$data.Transactions(EmpID)”>( 可以使用自定义绑定吗 像这样的 <table> <tbody data-bind="foreach: Employees, v

我想创建一个由Soid过滤的列表

基本上我有两种清单:1个员工,2个交易

Employees got EmpID and Name
Transactions got `ID` , EmpID , and TransDate
我需要这样的过滤器:
databind=“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>

这就是我所累的:

所以,这将起作用:

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


我希望这会有所帮助。

员工和交易之间的联系是什么?员工有一个交易集合,或者交易有一个EmployeeID?您可以共享一个视图模型示例吗?交易有一个EmployeeID谢谢,但我想了解更多信息,我需要创建custombinding吗?我如何从数据bindin传递EmpIDGUI?我修改了我的帖子来回答你的问题。好的,但是可以使用自定义绑定传递empID吗?如果可以,那么将非常感谢帮助:)empID应该从哪里来?你能写一个你想要使用的自定义绑定吗?好的,类似这样: