2012-05-30 23 views
14

Ive ko.computed arbeitet für abit mit MVC4 SPA, mit knockoutJs,Passing Werte in Knockout JS

Mein Problem ist, ich Wert auf eine ko.computed übergeben wollen. Hier ist mein Code.

Ich möchte einfach den Firmnamen als Überschrift anzeigen, dann zeigen Sie die Clients darunter. Die Funktion aufgerufen wird, aber Id ist nicht definiert (ive versucht, mit ‚Firm‘ als gut), wenn ich ändern:

var filter = id;  TO  var filter = 1; 

Es funktioniert gut,

So ... Wie übergeben Sie einen Wert zu einem ko.computed? Es muss nicht die ID sein, es kann auch das Firm-Objekt usw. sein.

Vielen Dank im Voraus.

+0

Id sollte eine beobachtbare auf Ihrem Viewmodel sein. Sie sollten nur von innerhalb des berechneten zugreifen. – Tyrsius

Antwort

19

Jedes Unternehmen sollte wirklich eine Liste der Kunden werden enthält, aber Sie eine reguläre Funktion, die ich denke, verwenden könnte und es die Firma übergeben:

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

dann in html, Daten $ ist das aktuelle Modell, in Ihrem Fall der Firma:

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

Tankyou !! Genau das brauche ich :) Aber ich denke auch, dass ich die Clients von Anfang an in einer Liste haben sollte. – Wondermoose

8

Mit Knockout können Sie nichts an eine berechnete Funktion übergeben. Dafür ist es nicht. Sie können stattdessen nur eine normale Funktion verwenden, wenn Sie möchten.

Eine weitere Option ist, dass die Daten bereits in der Datenmenge enthalten sind, auf der Sie die erste foreach ausgeführt haben. Auf diese Weise verwenden Sie nicht $parent.getClients, sondern eher wie $data.clients.

+0

Ich werde nicht mit diesem Vorschlag atm gehen, aber es ist etwas, was ich für die Zukunft im Hinterkopf haben werde, danke für die Antwort über berechnet. – Wondermoose

+1

kein Problem. Ich hatte den gleichen Vorschlag in meiner Antwort, aber die andere Antwort hat Beispiele. –