2012-05-30 44 views
14

Tôi đã làm việc cho abit với MVC4 SPA, với knockoutJs,Truyền giá trị cho ko.computed trong Knockout JS

Vấn đề của tôi là tôi muốn chuyển giá trị cho ko.computed. Đây là mã của tôi.

<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); 
    }); 
}); 

Tôi chỉ muốn hiển thị Tên công ty làm tiêu đề, sau đó hiển thị các khách hàng bên dưới nó. Chức năng này được gọi, nhưng Id là undefined (ive thử với 'Công ty' là tốt), nếu tôi thay đổi:

var filter = id;  TO  var filter = 1; 

Nó hoạt động tốt,

Vì vậy ... Làm thế nào để bạn vượt qua một giá trị cho ko.computed? Nó không cần phải là Id, nó cũng có thể là đối tượng Công ty, v.v.

Xin cảm ơn trước.

+0

Id phải là một quan sát được trên chế độ xem của bạn. Bạn chỉ nên truy cập nó từ bên trong tính toán. – Tyrsius

Trả lời

19

Mỗi công ty thực sự cần được chứa danh sách các khách hàng, nhưng bạn có thể sử dụng một chức năng thường xuyên Tôi suy nghĩ và vượt qua nó công ty:

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

Sau đó, trong html, $ dữ liệu là mô hình hiện tại, trong bạn trường hợp công ty:

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

Tankyou !! Đây chỉ là những gì tôi cần :) Nhưng Ill cũng có trong tâm trí rằng tôi nên có các khách hàng trong một danh sách từ đầu. – Wondermoose

8

Loại bỏ không cho phép bạn chuyển bất kỳ thứ gì vào một hàm được tính toán. Đó không phải là những gì nó cho. Thay vào đó, bạn chỉ có thể sử dụng chức năng thông thường nếu muốn.

Một tùy chọn khác là có dữ liệu đã có trong tập dữ liệu mà bạn đã thực hiện lần đầu tiên. Bằng cách này, bạn không sử dụng $parent.getClients, nhưng giống như $data.clients.

+0

Tôi sẽ không đi với đề xuất này atm, nhưng một cái gì đó tôi sẽ có trong tâm trí cho tương lai, nhờ câu trả lời về tính toán. – Wondermoose

+1

không sao cả. Tôi đã có cùng một gợi ý trong câu trả lời của tôi, nhưng câu trả lời khác có các ví dụ. –

Các vấn đề liên quan