2012-07-14 7 views
7

Hãy nói rằng tôi có 2 mô hình:Ember.js hiệp hội dữ liệu không tiết kiệm

App.Address = DS.Model.extend({ 
    street: DS.attr('string'), 
    person: DS.belongsTo('App.Person') 
}) 

App.Person = DS.Model.extend({ 
    name: DS.attr('string'), 
    addresses: DS.hasMany('App.Address') 
}) 

Bây giờ tôi có thể tạo một người

App.person = App.Person.createRecord({name: 'Bill'}); 
App.store.commit(); 

Nếu tôi cố gắng thêm một địa chỉ để người đó như

này
address = App.Address.createRecord({street: '123 Fake Street'}); 
App.person.get('addresses').pushObject(address); 

và cam kết giao dịch

App.store.commit(); 

Địa chỉ mới sẽ được lưu tuy nhiên đối tượng người sẽ không được nhận dạng là đã thay đổi; mặc dù danh sách các id đã đi từ

{ 
    ... 
    "addresses": [] 
} 

để

{ 
    ... 
    "addresses": [3] 
} 

Có cách nào để cho ember dữ liệu biết rằng đối tượng người của tôi đã được thay đổi và nó cần để được cứu?

Chỉnh sửa: Here là jsfiddle minh họa sự cố.

+2

Tôi không quan tâm xem lỗi ở đâu, như giao diện điều khiển hiển thị kết quả mong đợi ... Bất kỳ cập nhật trạng thái về vấn đề của bạn? Có lẽ bạn đang sử dụng bản sửa đổi dữ liệu cũ? Bạn vẫn gặp phải vấn đề này? –

Trả lời

1

Hiện tại (bản sửa đổi dữ liệu ember 4) không có cách nào để thực hiện việc này. Đối tượng chỉ được duy trì ở phía bên thuộc tính vì nó có khóa ngoài, vì vậy nếu bạn đặt giá trị trong thuộc về bên của quan hệ, nó sẽ vẫn tồn tại. Phiên bản tiếp theo của dữ liệu ember sẽ giải quyết vấn đề này.

1

Công việc xung quanh tôi đã tìm thấy cho điều này là chỉ tự thêm các id như:

App.Address = DS.Model.extend({ 
    street: DS.attr('string'), 
    personID: DS.attr('string'), 
    person: DS.belongsTo('App.Person') 
}) 

sau đó khi bạn gửi dữ liệu của bạn, thiết lập các lĩnh vực PersonId và nó sẽ bắt chước những gì lĩnh vực người có vẻ như nó nên gửi đi.