将值传递给Knockout JS中的ko.computed

Won*_*ose 15 javascript asp.net-mvc-4 knockout.js

我一直在使用MVC4 SPA工作,有敲门声,

我的问题是我想将值传递给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);
    });
});
Run Code Online (Sandbox Code Playgroud)

我只想将Firmname显示为标题,然后显示它下面的客户端.正在调用该函数,但Id未定义(我也尝试使用'Firm'),如果我改变:

var filter = id;     TO      var filter = 1;
Run Code Online (Sandbox Code Playgroud)

它工作正常,

那么......你如何将值传递给ko.computed?它不需要是Id,它也可以是Firm对象等.

提前致谢.

Jas*_*aat 19

每个公司真的应该包含一个客户列表,但你可以使用我认为的常规功能并将其传递给公司:

self.getClientsForFirm = function (firm) {
    return ko.utils.arrayFilter(self.Clients(), function (item) {
        var fId = item.FirmId();
        return (fId === firm.Id());
    });
});
Run Code Online (Sandbox Code Playgroud)

然后在html中,$ data是当前模型,在您的情况下是公司:

<div data-bind="foreach: $root.getClientsForFirm($data)">
Run Code Online (Sandbox Code Playgroud)


Ren*_*Pot 8

Knockout不允许您将任何内容传递给计算函数.这不是它的用途.如果你愿意,你可以在那里使用常规功能.

另一种选择是将数据存储在您第一次执行的数据集中.这样,你不用$parent.getClients,但更喜欢$data.clients.