2013-02-28 32 views
8

TRẢ LỜI CÂU HỎI NÀY VÀ CÂU HỎI NÀO NÀY LÀ BẤT HỢP. EMBER DATA ĐÃ THAY ĐỔI NHIỀU LỚN. ĐỌC: http://guides.emberjs.com/v1.11.0/models/

Tôi có điều này ít ứng dụng Ember:Cách xác định độ dài của kết quả tìm() trong Ember.js

window.App = Ember.Application.create(); 

App.Store = DS.Store.extend({ 
    revision: 11, 
    adapter: DS.FixtureAdapter({ 
    simulateRemoteResponse: false 
    }) 
}); 

App.Model = DS.Model.extend({ 
    title: DS.attr('string') 
}); 
App.Model.FIXTURES = []; 

App.ready = function() { 
    console.dir(App.Model.find().get('length')); 
    App.Model.createRecord({id: 1, title: "TEST"}); 
    console.dir(App.Model.find().get('length')); 
    console.dir(App.Model.find(1).get('title')); 
}; 

tôi nhận được danh hiệu ngay trong console.dir(App.Model.find(1).get('title') tuy nhiên cả hai get('length') cuộc gọi trả lại 0. Tôi đang thiếu gì?

Đây là một (không) jsbin làm việc: http://jsbin.com/uxalap/6/edit

Trả lời

9

Lý do có thể là bạn đang gọi get("length") ngay cả trước khi dữ liệu đã được nạp,

Về cơ bản khi bạn làm App.Model.find() nó sẽ trả về cho bạn một ví dụ của RecordArray nhưng nó sẽ không có dữ liệu, trong nền nó truy vấn với cơ sở dữ liệu và sẽ tìm nạp dữ liệu, bây giờ khi dữ liệu được tải, bạn sẽ tìm thấy chiều dài thực tế

bạn có thể thử thêm Observer trên isLoaded propert y như sau

record = App.store.findQuery(App.Model); 
alertCount = function(){ 
    if(record.isLoaded){ 
    alert(record.get("length")); 
    } 
}; 
Ember.addObserver("isLoaded", record, alertCount); 
+0

Bạn cũng có thể sử dụng sự kiện 'didLoad' thay vì quan sát thuộc tính gián tiếp: record.one ('didLoad', function() {alert (record.get ('length'))}); –

+0

@ChristopherSwasey bây giờ tôi nhận được: Lỗi: Không tìm thấy tại RSVP.onerrorDefault – SuperUberDuper

+2

QA này là 2 tuổi và dữ liệu Ember đã thay đổi đáng kể trong thời gian đó. Tôi ước có một cách để gắn cờ và lỗi thời các câu hỏi/câu trả lời trên SO. –

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