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!
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. –
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ủ. –
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