2011-01-14 24 views
5

Tôi đang làm việc trên một trang web được viết bằng Prototype nhưng chúng tôi đang chuyển sang jQuery. Rất nhiều cập nhật trang được thực hiện thông qua Ajax.Updater của Prototype. Tuy nhiên, đôi khi các yếu tố mà Prototype loại bỏ và thay thế đã có một tiện ích jQuery chạy trên chúng, vì vậy $ .cache có tham chiếu đến các yếu tố bổ sung được tạo ra bởi các widget. Vì jQuery không thực hiện việc loại bỏ DOM, nó không có cơ hội để xóa dữ liệu từ $ .cache cho các phần tử đó khi chúng bị loại bỏ, và tôi kết thúc với một rò rỉ bộ nhớ. Có cách nào để nói với jQuery để kiểm tra nó $ .cache và loại bỏ bất kỳ dữ liệu cho các yếu tố không còn trong DOM?Không sử dụng jQuery .data() trên một phần tử và sau đó xóa phần tử thông qua bộ nhớ rò rỉ thao tác DOM trực tiếp

Trả lời

3

Nghe có vẻ hơi phức tạp - đặc biệt kể từ Ajax.Updater là một chuyên môn của Ajax.Request, không không có một cuộc gọi lại không đầy đủ, có nghĩa là bạn có thể phải kiểm tra bộ nhớ cache định kỳ nhiều thứ. Điều đó nghe giống như nhiều công việc hơn là tạo ra một 'updater' của jQuery.

Nếu bạn sẵn sàng thay thế trình cập nhật bằng ghi đè jQuery, vấn đề này hoàn toàn biến mất và chắc chắn đơn giản hơn là làm việc xung quanh nó. Đơn giản 'updater' trong jQuery sau.

function update() { 
    $.ajax({ 
     type: 'get', 
     url: 'theContent.html', 
     success: function(text) { 
      // .html calls '.cleanData()' internally. No need to do anything else. 
      $('#updateMe').html(text); 
     } 
    }); 
} 

var i = setInterval(update, 5000); 
+0

Vì chúng tôi đã chạy phiên bản Prototype tùy chỉnh để bắt đầu, tôi vừa cập nhật các đối tượng Prototype Object.remove và Object.update để sử dụng jQuery để xóa các phần tử nếu jQuery hiện diện, qua đó đảm bảo dọn sạch dữ liệu. Tôi không muốn viết một trình cập nhật jQuery vì Ajax.Updater của Prototype được sử dụng ở quá nhiều nơi trong toàn bộ mã của chúng tôi để thay thế và kiểm tra đầy đủ trong một khoảng thời gian hợp lý. –

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