2012-10-29 24 views
6

tôi đang quan sát một số mảng Ember như vậy:Ember.JS: Quan sát @each, nhưng chỉ cần lặp lại qua mới/thay đổi mục

observe_array: function() { 
    this.get("my_array").forEach(function(e,i) { 
     // do something 
    }); 
}.observes("[email protected]"); 

Hầu hết các lần, nếu my_array được cập nhật, nhiều yếu tố được thêm vào Một lần. Tuy nhiên, người quan sát bắn từng người một khi mỗi phần tử được thêm vào, điều này trở nên cực kỳ kém hiệu quả. Có anyway để làm điều này hiệu quả hơn? Về cơ bản, tôi cần có khả năng có một mảng đột biến dựa trên "my_array"

Để tham khảo, kích thước thực tế của my_array sẽ nằm trong khoảng từ 600-1200 phần tử. Khối "làm điều gì đó" liên quan đến một số hoạt động mất nhiều thời gian hơn - tạo các đối tượng Date từ các chuỗi và chuyển đổi từng phần tử thành biểu diễn json.

Thay vì làm một người quan sát tôi cũng đã cố gắng một tài sản với khả năng lưu nhớ() phương pháp/cờ, nhưng điều đó không đường may để điều tốc độ lên rất nhiều ....

+0

bạn có biết khi nào mảng của mình được cập nhật không? –

+0

@ sly7_7 Tôi e rằng tôi không hoàn toàn hiểu những gì bạn đang hỏi, hoặc ít nhất là loại câu trả lời bạn đang tìm kiếm. Mảng này thực sự là mảng bản ghi Ember-Data, và đại diện cho tất cả các phần tử được nạp từ một mô hình nhất định. –

+0

Bạn cho tôi một câu trả lời hay ở đây, ngay cả khi câu hỏi của tôi là một crap ^^. Hãy thử để quan sát my_array.isLoaded và xem nếu nó tốt hơn :) –

Trả lời

1

Giả sử (thông qua ý kiến) mà bạn mảng là một dữ liệu phổ biến, bạn nên thử quan sát thuộc tính array.isUpdating. Tôi đã thành công với cái này.

Hạn chế duy nhất là nó chỉ được đặt khi sử dụng .findAll()! (do đó Model.find())

+0

Vâng, đây là những gì tôi đã kết thúc: Tôi có một bộ lọc "filterData" về cơ bản là một store.filter trên mô hình của tôi. Trước đây tôi đã thử quan sát isLoading, isUpdating, vv, về điều này ... tuy nhiên nó bắn mỗi khi một mục được thêm vào. Riêng tôi đã truy vấn các mục bằng cách sử dụng store.findQuery. những gì tôi đã kết thúc chỉ là quan sát isLoading trên store.findQuery, nó chỉ kích hoạt một lần - sau khi nó tải tất cả các mục. –

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