Knockout.js 2.3嵌套循环,click事件已停止工作

时间:2014-10-01 05:17:19

标签: knockout-2.0

使用Knockout生成模态弹出窗口,因此当单击列表中的按钮时,会将所选数据传回输入框。 使用单循环时,一切正常。 按钮单击事件工作正常。 为了更好的外观,我不得不创建一个嵌套循环,这可以为每个客户端创建一个表,但现在click事件已停止工作... 工作代码:

<table class="table table-hover table-bordered table-striped table-condensed">
            <tbody data-bind="foreach: jobs">
...
<button data-bind="text: Description, attr: { 'data-idx': $index, 'data-code': Code }, click: $parent.selectCode" class="btn btn-block text-left"></button>

脚本:

self.selectCode = function() {
var desc = this.Description;
some more code...
}

我在客户端上添加了一个外部循环,因此我可以为每个客户端分隔表,不幸的是,这对我不起作用(KO新增)。 内部循环为每个客户端提取数据(通过Id)。 使用嵌套循环,click事件当前未触发:

<div data-bind="foreach: clients">
            <table class="table table-hover table-bordered table-striped table-condensed">
                <tbody data-bind="foreach: $parent.filteredJobs(ClientID)">
...
<button data-bind="text: Description, attr: { 'data-idx': $index, 'data-code': Code }, click: $parent.selectCode" class="btn btn-block text-left"></button>

通过id(内部循环)获取客户端的额外脚本:

self.filteredJobs = function(clientId) {
        return ko.utils.arrayFilter(jobs, function(job) {
            return (job.ClientID === clientId);
        });
    };

我也按建议here尝试了父索引 $ parentContext。$ index,结果没有变化。

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决办法:) 点击事件更改为$ root而不是$ parent ...

click: $root.selectCode