2013-01-05 24 views
6

Tôi đã sử dụng cam kết eaa1123 (ember) và 508479d (dữ liệu ember) để xây dựng các tệp JS.Không thể kết hợp hasMany

Tôi đã JSON sau trở về từ backend Rails của tôi, mà được tạo ra với active_model_serializers (0.6.0):

{ 
    "posts": [ 
    { 
     "id": 408, 
     "title": "Lorem Ipsum", 
     "body": "In at quo tempora provident nemo.", 
     "comments": [ 
     { 
      "id": 956, 
      "body": "Quo incidunt eum dolorem." 
     }, 
     ... 
     ] 
    } 
    ] 
} 

và các mô hình Ember sau:

App.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    body: DS.attr('string'), 
    comments: DS.hasMany('App.Comment', { 
    embedded: true 
    }) 
}); 

App.Comment = DS.Model.extend({ 
    body: DS.attr('string'), 
    post: DS.belongsTo('App.Post') 
}); 

Tất cả trông hoàn toàn bình thường :

post = App.Post.find(408); 
post.get('title') 
// => "Lorem Ipsum" 

Tuy nhiên, tôi dường như không thể nhận được nhận xét:

comments = post.get('comments') 
comments.get('firstObject') instanceof App.Comment 
// => true 
comments.forEach(function(comment) { 
    console.log(comment.get('body')) 
}) 
//=> undefined 

Khi tôi sử dụng:

comments.content 

tôi nhận được một mảng chứa các đối tượng, như vậy:

comments.content[0] 
//=> { body: "Quo incidunt eum dolorem.", id: 956 } 

nhưng đây không phải là những gì tôi mong đợi.

Có vẻ như rất hiển nhiên, vì vậy tôi phải làm điều gì đó sai. Là một tác dụng phụ: hiện tại tôi không thể hiển thị nhận xét của mình trong một mẫu một cách dễ dàng, vì vậy tôi hy vọng ai đó có thể giúp tôi về vấn đề này.

Xin cảm ơn trước.

Trả lời

10

Nếu bạn sử dụng cam kết đó có nghĩa là bạn đang sửa đổi dữ liệu mới nhất, đó là 11. Thêm được nhúng: true để tải một liên kết nhúng không được chấp nhận trong khi quay lại giữa phiên bản 5 hoặc 9, không quá chắc chắn lần nữa.

Nếu bạn đang sử dụng restAdapter mặc định, bây giờ bạn cần phải xác định tải nhúng như một ánh xạ như hình dưới đây và không phải là một tùy chọn liên kết:

App.store = DS.Store.create({ 
    revision: 11, 
    adapter: DS.RESTAdapter.create() 
}); 

App.store.adapter.serializer.map('App.Post', { 
    comments: {embedded: 'load'} 
}); 

App.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    body: DS.attr('string'), 
    comments: DS.hasMany('App.Comment') 
}); 

App.Comment = DS.Model.extend({ 
    body: DS.attr('string'), 
    post: DS.belongsTo('App.Post') 
}); 

Bạn có thể làm theo tất cả các cuộc thảo luận trước đó về nó thông qua liên kết bên dưới:

https://github.com/emberjs/data/issues/504#issuecomment-11256934 https://github.com/emberjs/data/pull/430#issuecomment-10925506

Nhiều bản sửa lỗi cho các hồ sơ bốc nhúng: https://github.com/emberjs/data/pull/541

này không liên quan trực tiếp nhưng trong trường hợp tất cả tôi đã viết ở trên thất bại, sau đó thêm dung dịch này thành các hiệp hội BelongsTo trộn không cụ thể hóa khi sử dụng findAssociation và extractHasMany móc cho async HasMany: https://github.com/emberjs/data/issues/525

Các nội bộ cho bất kỳ ai muốn xem nhanh nơi mọi thứ được xác định liên quan đến cuộc gọi tới 'App.store.adapter.serializer.map'

Khi chúng tôi gọi 'App.store.adapter.ser ializer.bản đồ ', cuộc gọi đến bộ nối tiếp được xác định trên dòng 536 bên dưới và bản đồ trực tuyến 696 trong liên kết thứ 2

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/adapter.js#L536 https://github.com/emberjs/data/blob/master/packages/ember-data /lib/system/adapter.js#L696

On line 67 của DS.RESTAdapter kéo dài DS.Adapter, các serializer tài sản được thực hiện để trỏ đến DS.RESTSerializer nơi chức năng bổ sung cụ thể cho RestAdapter được thêm vào.

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/adapters/rest_adapter.js#L67

+0

Cảm ơn rất nhiều, điều đó chắc chắn đã giúp ích. Đoán tôi đã mất dấu những thay đổi ở đâu đó;) – bazzel

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