我一直在与MVC4 SPA合作,使用knockoutJs,
我的问题是我想将值传递给ko.computed。这是我的代码。
<div data-bind="foreach: firms">
<fieldset>
<legend><span data-bind="text: Name"></span></legend>
<div data-bind="foreach: $parent.getClients">
<p>
<span data-bind="text: Name"></span>
</p>
</div>
</fieldset>
</div>
self.getClients = ko.computed(function (Id) {
var filter = Id;
return ko.utils.arrayFilter(self.Clients(), function (item) {
var fId = item.FirmId();
return (fId === filter);
});
});
我只想将Firmname显示为标题,然后在其下方显示客户端。 正在调用该函数,但Id未定义(我也尝试使用'Firm'),如果我改变:
var filter = id; TO var filter = 1;
一切正常,
那么......你如何将值传递给ko.computed?它不需要是Id,它也可以是Firm对象等。
答案 0 :(得分:19)
每个公司真的应该包含一个客户列表,但你可以使用我认为的常规功能并将其传递给公司:
self.getClientsForFirm = function (firm) {
return ko.utils.arrayFilter(self.Clients(), function (item) {
var fId = item.FirmId();
return (fId === firm.Id());
});
});
然后在html中,$ data是当前模型,在您的情况下是公司:
<div data-bind="foreach: $root.getClientsForFirm($data)">
答案 1 :(得分:8)
Knockout不允许您将任何内容传递给计算函数。这不是它的用途。如果你愿意,你可以在那里使用常规函数。
另一个选择是让数据已经在您第一次进行预览的数据集中。这样,您就不会使用$parent.getClients
,而更像是$data.clients
。