2012-04-05 21 views
8

Với ember-dữ liệu tôi đang tải tất cả hồ sơ của một mô hình với:Ember-Data callback khi FindAll xong tải tất cả hồ sơ

App.adapter = DS.Adapter.create({ 
    findAll: function(store, type) { 
     var url = type.url; 
     jQuery.getJSON(url, function(data) { 
      var ids = data.map(function(item, index, self){ return item.id }); 
      store.loadMany(type, ids, data); 
     }); 
    } 
}); 

Phương pháp didLoad được gọi khi mỗi người trong số các bản ghi đã tải xong. Có phương thức nào để gọi khi tất cả các bản ghi đã tải xong không?


EDIT

mẫu:

App.Article = DS.Model.extend({ 

    title: DS.attr('string'), 
    content: DS.attr('string'), 


    checkIsLoaded: function() { 
     if (this.get('isLoaded')){ 
     console.log('loaded!'); // outputs `loaded` for each record 
     } 
    }.observes('isLoaded') 

}); 

Trả lời

6

Có, bạn có thể sử dụng findQuery, và sau đó quan sát .isLoaded tài sản trên ModelArray.

ví dụ:

load: -> 
    @set 'data', @get('store').findQuery App.MyModel, { q: '...' } 

Và có quan sát:

loadingComplete: (-> 
    @doSomeStuff() if @getPath 'data.isLoaded' 
).observes 'data.isLoaded' 
+0

Chỉ cần thử nó và nó cũng làm như vậy: cháy lên trên mỗi bản ghi nạp –

+0

Tuyệt đối, nhưng trong mã của bạn, mỗi trường hợp mô hình quan sát thuộc tính 'isLoaded'. Trong đề xuất của tôi, toàn bộ 'ModelArray' được quan sát một lần, trong ngữ cảnh sử dụng ... –

+0

Cảm ơn, hoàn toàn bỏ lỡ điều đó! Nó hoạt động như bạn đề nghị. Không chắc chắn tại sao 'findAll' không đặt cờ' isLoaded'. –

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