2012-08-16 27 views
6

Thực sự bắt đầu thưởng thức KnockoutJs (http://knockoutjs.com). Hầu hết các ứng dụng web của tôi đều được điều khiển ajax. Toàn bộ trang web được tải và sau đó từ liên kết đến liên kết, chúng tôi chỉ thay đổi nội dung thông qua cuộc gọi ajax.Knockout.js Binding trên Ajax Driven Pages

Khi ajax trở lại với nội dung mới, tôi có thể thực hiện các ràng buộc Knockout của mình. Không vấn đề gì. Khi tôi liên kết đến trang tiếp theo (chỉ cần gọi ajax với thay thế nội dung). Các tòa nhà Knockout, tôi sẽ giả định vẫn còn trong bộ nhớ, nhưng không thực sự bị ràng buộc vì dom đã thay đổi. Một số câu hỏi về chủ đề này.

  1. Nếu trang tiếp theo không có bất kỳ Knockout nào trên thực tế là xấu khi rời khỏi loại đối tượng loại bỏ chỉ nằm trong bộ nhớ? Tốt hơn là có một cách để thiết lập lại (rõ ràng) các đối tượng loại trực tiếp?

  2. Khi tôi đi từ một trang có liên kết loại trực tiếp đến một trang có liên kết loại trực tiếp, chỉ cần gọi ko.applyBindings() một lần nữa xóa hết nội dung cũ và khôi phục nội dung mới? (một lần nữa khi tôi nói đi từ trang này sang trang khác, tôi chỉ tải lại cơ thể bằng một cuộc gọi ajax).

  3. Không loại trực tiếp có bất kỳ ràng buộc "trực tiếp" nào. Sắp xếp như ràng buộc trực tiếp của jQuery? Bằng cách này Knockout có thể được tải lên phía trước và sau đó không phải được áp dụng lại từ thay đổi nội dung để thay đổi nội dung.

Nói chung, tôi đang tìm lời khuyên về cách sử dụng tốt nhất loại trực tiếp từ trang này sang trang khác trong đó trình duyệt không làm mới từ trang này sang trang khác.

Cảm ơn bạn đã trợ giúp.

+2

Câu hỏi này có thể giúp liên quan đến việc đặt lại các ràng buộc: http://stackoverflow.com/questions/10048485/how-to-clear-remove-observable-bindings-in-knockout-js – peacemaker

Trả lời

1

1) Nếu trang tiếp theo không có bất kỳ Knockout trên nó là nó thực sự là xấu để lại loại đối tượng loại trực tiếp chỉ kéo dài trong bộ nhớ? Tốt hơn là có một cách để thiết lập lại (rõ ràng) các đối tượng loại trực tiếp?

Không, không tệ đâu; nhưng nếu bạn thực sự muốn dọn dẹp thì bạn có thể gọi ko.removeNode.


2) Khi tôi đi từ một trang đó đã gán loại trực tiếp khác mà đã gán knock-out không chỉ kêu gọi ko.applyBindings() một lần nữa rõ ràng ra những thứ cũ và rebind những thứ mới? (một lần nữa khi tôi nói đi từ trang này sang trang khác, tôi chỉ tải lại cơ thể bằng một cuộc gọi ajax).

Tùy theo.

Trước hết, như GregT mentioned:

Người ta không nên gọi applyBindings() nhiều hơn một lần vào nút DOM cùng (s).

tôi biết từ kinh nghiệm - Calling ko.applyBindings() nhiều hơn một lần trên cùng một nút DOM sẽ gây ra một bộ nhớ bị rò rỉ. [Nếu bạn cần làm điều này, hãy gọi ko.cleanNode().]

OTOH, nếu bạn không gọi ko.applyBindings() nhiều hơn một lần vào nút DOM cùng, sau đó bạn nên sử dụng tốt because:

KO sẽ làm một số ngẫu nhiên khi thêm/gỡ bỏ các nút. Thời gian điển hình mà điều này xảy ra là khi kết xuất lại mẫu.


3) Liệu loại trực tiếp có bất kỳ ràng buộc "sống". Sắp xếp như ràng buộc trực tiếp của jQuery? Bằng cách này Knockout có thể được tải lên phía trước và sau đó không phải được áp dụng lại từ thay đổi nội dung để thay đổi nội dung.

Không phải là tôi biết, nhưng nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn không cần bất kỳ chức năng Knockout gốc nào để thực hiện những gì bạn cần. Bạn sẽ có thể tự mình kết nối với phương thức on() của jQuery (vì live() đã không còn được dùng nữa).