2012-06-07 39 views
6

Tôi nhận dữ liệu từ WCF và liên kết nó với một bảng. Tôi đã được giúp đỡ trong diễn đàn này để thêm một số lĩnh vực tính toán và mọi thứ hoạt động hoàn hảo. Tôi muốn thêm tổng số ở chân của bảng này. một phiên bản đơn giản của trang của tôi có thể được xem tại http://jsfiddle.net/qeUHd/3/. Về cơ bản tôi muốn tìm hiểu cách thêm một trường vào ViewModel của tôi là kết quả của tổng của một trường khác trong mẫu "Số tiền" của tôi. Mọi sự trợ giúp sẽ rất được trân trọng. http://jsfiddle.net/qeUHd/3/Tính toán loại trực tiếp

Trả lời

11

Trong fiddle của bạn, bạn đang lập bản đồ bộ dữ liệu của mình thành self.model, do đó self.model là observableArray. Vì đó là trường hợp, tôi chỉ cần đặt cùng một số computed value để nhận tổng số của bạn.

http://jsfiddle.net/qeUHd/5/

self.total = ko.computed(function(){ 
    var total = 0; 
    for(var p = 0; p < self.model().length; ++p) 
    { 
     total += self.model()[p].Amount(); 
    } 
    return total; 
}); 

Sau đó, chỉ cần đảm bảo liên kết với nó.

<td data-bind="text: total"> 

Bạn đang làm việc một chút lạc hậu, nhưng tôi cho rằng đó là cách bạn nhận dữ liệu, vì vậy tôi đã xử lý và tiếp tục.

+0

Cảm ơn bạn rất nhiều vì đã bắt đầu hiểu được loại trực tiếp hợp lý nhờ đội ngũ chuyên gia tuyệt vời tại đây. –

1

Mặc dù tôi thường khuyên bạn nên hỗ trợ việc đưa các trường được tính toán này vào mô hình xem (vì đó thường là nơi chúng thuộc về), có những lúc bạn đang làm việc với dữ liệu ở đó khó thêm thuộc tính được tính thêm. Một ví dụ sẽ là nếu bạn đang nhóm dữ liệu của mình trong chế độ xem. Trong trường hợp đó, bạn vẫn có thể hiển thị tổng số của mình, nhưng di chuyển phép tính sang chế độ xem:

<td data-bind="text: $data.reduce(function(x,y) { return x + y.Amount(); }, 0)"></td> 
Các vấn đề liên quan