2012-06-18 28 views
5

Có cách nào trong knockout.js để xác địnhquán tưởng phụ thuộc cho các lĩnh vực tính toán trong Knockout

  • các giá trị (ko.observable hoặc ko.computed) phụ thuộc vào nhau bằng cách nào (tiền lệ/người phụ thuộc) và
  • mà Các nút HTML (ràng buộc văn bản, cho người mới bắt đầu) phụ thuộc vào giá trị hiện tại , vì vậy tôi có thể đánh dấu chúng trên màn hình.

?

Điều này ngụ ý rằng tôi cần một cách để đi từ một nút HTML để các kết nối ko.subscribable, không chỉ để mô hình xem, như ko.dataFor() làm. Điều này dường như không thể là tốt.


tôi đã xây dựng một ứng dụng web hoạt động giống như một bảng tính - nhiều giá trị số được dựa vào nhau theo một bộ quy tắc kinh doanh. Một số trong số đó được tính toán, một số trong số đó do người dùng cung cấp.

Hiện tại tôi đang sử dụng thư viện JS của riêng mình, thực hiện tất cả việc theo dõi phụ thuộc và cập nhật màn hình động. Điều này làm việc, nhưng tôi muốn trao đổi nó với knockout.js cho thêm tính linh hoạt và sang trọng.

Knockout theo dõi thông tin này ở đâu đó. Tôi có thể sử dụng nó như thế nào?


Ví dụ, hãy tưởng tượng một bảng tính (một bảng HTML) mà tóm tắt một vài số nguyên:

 
    | A B C 
--+--------- 
1 | 4 1 5 
2 | 2 
3 | 3 8 
  • Khi người dùng nhấp vào ô B3, tôi muốn tìm hiểu rằng nó phụ thuộc vào B1 và ​​B2 và C3 phụ thuộc vào nó.
  • Khi người dùng nhấp vào ô C3, tôi muốn tìm hiểu rằng nó phụ thuộc vào A1, B1, C1, B2 và B3.

Trả lời

7

Tôi đã viết plugin for Knockout (2.0+) có mục đích chính là loại bỏ các bản cập nhật trùng lặp cho các quan sát được tính toán. Nhưng vì plugin thay thế đối tượng ko.computed, tôi cũng đã thêm khả năng nhận danh sách các phụ thuộc/người phụ thuộc cho các quan sát. Mỗi đối tượng được tính toán có phương thức getDependencies trả về một mảng các quan sát, và mỗi phương thức quan sát/được tính toán có một phương thức getDependents trả về một mảng các quan sát được tính toán.

+0

Điều này có vẻ khá hứa hẹn. Tôi cho rằng nó sẽ đủ dễ dàng để tăng thêm nó để nó theo dõi tiền lệ là tốt. Bây giờ tôi đang suy nghĩ về một ràng buộc 'text' tùy chỉnh tự động đăng ký các phần tử HTML được kết nối để tôi có cơ hội gọi' getDependents' trong trình xử lý nhấp chuột, ví dụ. – Tomalak

+0

Tôi không biết ý bạn là gì bởi "tiền lệ". –

+0

Thuật ngữ Excel: "Người phụ thuộc: giá trị phụ thuộc vào giá trị hiện tại". "Precedents: giá trị mà giá trị hiện tại phụ thuộc vào." – Tomalak

4

Đây là một câu hỏi rất thú vị - và, có vẻ như, không phải là câu hỏi đơn giản để trả lời. Tôi đã nhìn vào nguồn knockout và có vẻ như dữ liệu này được lưu trữ trong thuộc tính _subscriptionsToDependencies, nhưng điều đó dường như không được hiển thị công khai.

Tôi đã thông báo getDependenciesCount hiển thị - hãy kiểm tra this fiddle để xem nó hoạt động.

Tôi vẫn đang điều tra điều này, nhưng có vẻ như nó có thể yêu cầu một ngã ba loại trực tiếp trừ khi chúng tôi có thể nhận được ở mức quan sát cơ bản. Nhưng đây là những gì tôi đã tìm thấy cho đến nay, mà bạn có thể thấy hữu ích:

Chạy nó thông qua trình gỡ lỗi, có vẻ như khi chạy phiên bản rút gọn loại bỏ đổi tên thuộc tính _subscriptionsToDependencies thành V. Khi chạy, giá trị của thuộc tính getDependenciesCount là: function(){return v.length}

Tôi hy vọng điều này sẽ hữu ích.

Chỉnh sửa: Đối với những người đến câu hỏi này tìm câu trả lời, có vẻ như không thể thực hiện được trong KnockoutJS kể từ phiên bản 2.1

+0

Thông thường tôi tự trả lời các câu hỏi đơn giản. ;) - Biết số phụ thuộc là gần nhưng không có xì gà. Ngoài ra, điều này cho tôi biết không có gì về tiền lệ. Câu hỏi "mà phần tử HTML hiển thị giá trị này" đã xảy ra với tôi tại một dịp khác trong quá khứ là tốt. Điều này có vẻ khó trả lời. – Tomalak

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