我有两个独立的敲除可观察数组。如果你在foreach结构中调用一个函数,那么函数是在$ root中。该元素可供您使用。但似乎计算函数的情况并非如此。是否可以使其适用于计算功能?这是一个说明情况的小提琴。
https://jsfiddle.net/ubvyeba8/1/
或者您可以运行下面的代码段。
function employee(empid, first, last){
var self = this;
this.empid = ko.observable(empid);
this.first = ko.observable(first);
this.last = ko.observable(last);
}
function model() {
var self = this;
this.employees = ko.observableArray('');
this.employeesThatWorkInHR = ko.observableArray(['1','4','5'])
this.testComputable = ko.computed(function(emp){
if (emp){
return true;
}else{
return false;
}
},this);
this.testFunction = function(emp){
if (emp){
alert('true');
}else{
alert('false');
}
}
}
var mymodel = new model();
$(document).ready(function() {
ko.applyBindings(mymodel);
mymodel.employees.push(new employee('1','Fred','Smith'));
mymodel.employees.push(new employee('2','John','Jones'));
mymodel.employees.push(new employee('3','Mary','Jane'));
mymodel.employees.push(new employee('4','Sue','Green'));
mymodel.employees.push(new employee('5','Terrence','Small'));
});

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<table class="table">
<thead>
<tr>
<th>Id</th>
<th>First</th>
<th>Last</th>
<th>is emp passed to computed</th>
<th></th>
</tr>
</thead>
<tbody data-bind="foreach: employees">
<tr>
<td data-bind="text: empid"></td>
<td data-bind="text: first"></td>
<td data-bind="text: last"></td>
<td data-bind="text: $root.testComputable"></td>
<td><button class="btn" data-bind="click: $root.testFunction">
is emp passed to function
</button></td>
</tr>
</tbody>
</table>
&#13;
答案 0 :(得分:3)
在这个实例中使用计算机你想要完成什么?当一个值取决于其他可观察值的值时,使用计算函数,因此计算出的函数将跟踪相关值并相应地更新。如果你想要的是订阅你的可观察数组中的更改,那么你可以使用描述here的订阅函数(搜索&#39;明确订阅observables&#39;)。
订阅功能确实接受更新后的值作为其函数参数,因此您可以将其用于您的目的。一个计算函数不带参数(这就是为什么emp从未在你的例子中定义过),但你确实有这个&#39;这个&#39;您可以访问viewmodel中的其他属性。