2013-03-25 31 views
14

Tôi có Mô hình người dùng, có các thuộc tính kinh độ và vĩ độ, được sử dụng để hiển thị vị trí người dùng hiện tại trên bản đồ.Tải lại mô hình Ember trong khoảng thời gian

App.User = DS.Model.extend({ 
    firstName: DS.attr('string'), 
    lastName: DS.attr('string'), 
    email: DS.attr('string'), 
    jobs: DS.hasMany("App.Job"), 
    latitude: DS.attr('number'), 
    longitude: DS.attr('number'), 
    measuredAt: DS.attr('date'), 
}); 

Cách tốt nhất để tự động xác định vĩ độ và kinh độ từ máy chủ trong mỗi khoảng thời gian nhất định là gì? Dữ liệu không hỗ trợ loại trường hợp sử dụng này? Tôi không thể tìm thấy bất kỳ mẫu nào có chức năng này. Tôi nghĩ rằng tôi sẽ cần phải ghi đè lên phương pháp tìm kiếm cho lớp người dùng với setInterval trong nó, là phương pháp này đúng?

Cảm ơn

Trả lời

8

Đối với những người đang gặp phải câu hỏi này ngay bây giờ - không sử dụng setInterval, nó được hiển thị để gây rò rỉ bộ nhớ nghiêm trọng.

Sử dụng riêng của Ember Ember.run.later để thay thế.

Xem thêm:

+0

+1 để sử dụng vòng lặp chạy Ember thay vì một tập dữ liệu có sẵn. Điều này nên được bình chọn hoặc ít nhất được đưa vào câu trả lời đã chọn. –

+0

Cảm ơn câu trả lời, tôi sẽ chấp nhận câu trả lời này là chính xác. – lazzi

+0

bỏ phiếu để đưa lên [ember run loop] (http://guides.emberjs.com/v2.0.0/applications/run-loop/). Tôi tin rằng sự hiểu biết về vòng lặp chạy là một chút học tập tốt nhất cho một người mới bắt đầu có thể làm –

5

Mô hình này có một phương pháp .reload() bây giờ, mà bạn có thể sử dụng trong một callback setInterval. Xem https://stackoverflow.com/a/14183507/363073

P.S. Xem #545.

+0

Tôi curios biết: nơi nào 'setInterval' đến từ đâu? – Abdull

+1

https://developer.mozilla.org/en-US/docs/JavaScript/Timers – dechov

9

EDIT: Vui lòng xem câu trả lời của Dmitri Zagidulin.

Vì vậy, tôi đã tìm ra. Bây giờ tất cả những gì tôi cần là ghi đè phương thức didLoad trên mô hình, trong tương lai tôi có lẽ sẽ cần giải pháp phức tạp hơn, nhưng điều này là đủ cho bây giờ.

didLoad: function(){ 
    var self = this; 
    setInterval(function() {self.reload()}, 5*60*1000); //every 5 minutes 
} 

Trong trường hợp ai đó cần tải lại nhiều mô hình hơn, giải pháp tốt là thực hiện điều này dưới dạng Mixin.

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