2012-05-30 211 views
14

香港專業教育學院,以ko.computed工作了升技與MVC4 SPA,與knockoutJs,傳值淘汰賽JS

我的問題是我想要的值傳遞給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); 
    }); 
}); 

我只想顯示固件名稱作爲標題,然後顯示它下面的客戶端。 函數被調用,但編號是不確定的(與「企業」藏漢香港專業教育學院試過),如果我改變:

var filter = id;  TO  var filter = 1; 

它工作正常,

所以......你怎麼傳的值到ko.computed?它不需要是Id,它也可以是公司對象等。

在此先感謝。

+0

Id應該是您的視圖模型上的可觀察值。您應該只從計算機內訪問它。 – 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

敲除不允許您將任何事傳遞給計算函數。這不是它的目的。如果你願意,你可以在那裏使用常規功能。

另一種選擇是讓數據已經存在於你做第一個foreach的數據集中。這樣,你不使用$parent.getClients,但更像$data.clients

+0

我不會去與這個建議atm,但它的東西我將銘記未來,感謝有關計算的答案。 – Wondermoose

+1

沒問題。我在我的答案中有同樣的建議,但另一個答案有例子。 –