2012-05-30 8 views
14

アイブ氏はknockoutJsで、MVC4のSPAとABITのために働いてでko.computedに値を渡すと、はノックアウトJS

私の問題は、私はko.computedに値を渡したいです。ここに私のコードです。

単にFirmnameをヘッダーとして表示し、その下にクライアントを表示します。 関数が呼び出されているが、私は変更する場合は、idは、(aswell「事務所」で試みたアイブ)定義されていない:どのように値を渡すん

var filter = id;  TO  var filter = 1; 

それは正常に動作し、

だから... ... ko.computedに?それはIDである必要はありません、それはまた、会社オブジェクトなど

ありがとうございます。

+0

あなたのviewmodel上で観察可能である必要があります。計算された範囲からアクセスするだけです。 – Tyrsius

答えて

19

各企業は本当にクライアントのリストを含むべきであるが、あなたは私が考える通常の関数を使用し、それに会社を渡すことができますが:

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

が続いてHTMLで、$データは、あなたの中に、現在のモデルであります場合会社:

<div data-bind="foreach: $root.getClientsForFirm($data)"> 
+0

Tankyou !!これはちょうど私が必要なものです:)しかし、病気はまた、私は最初からリストにクライアントを持っている必要があることを念頭に置いています。 – Wondermoose

8

ノックアウトでは、計算された関数に何も渡せません。それはそれが何であるかではありません。あなたが望むのであれば、代わりに正規の関数を使うこともできます。

もう1つの方法は、最初のforeachを行ったデータセットにデータを格納することです。この方法では、$parent.getClientsは使用しませんが、$data.clientsのようになります。

+0

私はこの提案atmと一緒に行くつもりはありませんが、私は将来について心に留めておきます。 – Wondermoose

+1

問題ありません。私は私の答えに同じ提案をしましたが、他の答えには例があります。 –

関連する問題