15

私はMVC4SPA、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);
    });
});

会社名をヘッダーとして表示し、その下にクライアントを表示したいだけです。関数が呼び出されていますが、変更した場合、Idは未定義です(「Firm」でも試しました)。

var filter = id;     TO      var filter = 1;

それはうまくいきます、

では...どのようにしてko.computedに値を渡しますか?Idである必要はなく、Firmオブジェクトなどでもかまいません。

4

2 に答える 2

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)">
于 2012-05-31T04:18:06.207 に答える
8

ノックアウトでは、計算された関数に何も渡すことができません。それはそのためのものではありません。必要に応じて、代わりに通常の関数を使用することもできます。

もう 1 つのオプションは、最初に foreach を実行したデータセットに既にデータを含めることです。この方法では、 を使用しません$parent.getClientsが、より似てい$data.clientsます。

于 2012-05-30T19:25:36.883 に答える