2012-09-11 14 views
7

tôi có mô hình Emberjs dữ liệu sau đây:Emberjs dữ liệu Làm thế nào để tải hasMany-Data sau

App.File = DS.Model.extend({ 
    like: DS.attr('boolean'), 
    comments: DS.hasMany('App.Comment') 
}); 

App.Comment = DS.Model.extend({ 
    file: DS.belongsTo('App.File'), 
    comment: DS.attr('string') 
}); 

Và preload nó với:

App.store.load(App.File, {id: 1, like: false}); 

Bây giờ tôi nghĩ, nếu tôi nhận được những ý kiến ​​như thế này :

var f = App.store.find(App.File, 1); 
var c = f.get("comments"); 

var c là một EmberArray trống và yêu cầu được gửi đến máy chủ. Nhưng tôi không nhận được yêu cầu? Tại sao tôi phải làm như thế nào? Tôi thực sự không muốn tải trước các bình luận.

Hơn nữa, nếu tôi thêm một bình luận, mà còn thay đổi các tập tin cùng một lúc:

f.get("comments").createRecord({comment: "test"}); 
f.set("like", true); 
App.store.commit(); 

Hai yêu cầu được gửi đến máy chủ. Nhưng nếu sau đó tôi trả lại JSON sau (đối với tệp):

{ "id": 1, like: true } 

Nhận xét hiển thị đầu tiên của tôi biến mất một lần nữa. Tại sao? Và tôi phải làm gì?

Cảm ơn sự giúp đỡ của bạn!

Trả lời

1

Về phần đầu của câu hỏi của bạn: Bạn nên cư id bình luận trong dữ liệu của file:

App.store.load(App.File, {id: 1, like: false, comments: [1, 2, 3]}); 

Vì vậy, các ý kiến ​​sẽ được lười biếng nạp khi cần thiết.

Về phần thứ hai: Bạn chắc chắn không tuần tự hóa các id nhận xét trên thư trả lời từ máy chủ, vì vậy các nhận xét được đặt lại, khi bạn mô tả danh sách nhận xét trống.

Bạn ít nhất phải trả lại id nhận xét như được hiển thị ngay trước ... Hai vấn đề được liên kết.

+0

Cảm ơn câu trả lời nhanh. Được. Có không có cách nào khác? Bằng cách này dẫn đến nhiều truy vấn sql hơn cho dữ liệu, mà trong hầu hết các trường hợp, tôi không cần. Và nó sẽ không giúp đỡ cho vấn đề thứ hai, bởi vì yêu cầu đầu tiên đến máy chủ là yêu cầu cho tập tin được cập nhật. Và yêu cầu thứ hai là yêu cầu thêm nhận xét. Có lẽ nó sẽ làm việc, nếu tôi thêm một lệnh cam kết thứ hai sau khi createRecord. –

+0

Tôi sẽ prefere cơ chế được sử dụng với findQuery. Lần đầu tiên bạn sử dụng thuộc tính comments, một findQuery sẽ được chuyển đến máy chủ. –

+1

Tôi gặp phải vấn đề tương tự. Sẽ tốt hơn nếu thay vì yêu cầu id cho cuộc gọi findMany, họ sẽ hỗ trợ tìm nạp thông qua một truy vấn bằng cách sử dụng khóa ngoại. Tôi quyết định chỉ cần thêm một phương thức "getComments" vào mô hình của tôi để chạy findQuery. – jhorman

0

Có vẻ như phần câu trả lời cho điều này là sử dụng phương thức DS.Adapter.findAssociation(...) trong bộ điều hợp của bạn. Tuy nhiên, tôi đang gặp vấn đề tương tự như bạn khi bản ghi cha được tải lại từ máy chủ - tất cả các bản ghi con đều bị zapped.

Tôi đã đăng my own question để xem tôi có thể sắp xếp điều này không. Nếu câu hỏi đó được trả lời, nó cũng có thể là câu trả lời cho bạn.

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