javascript - 如何使嵌入的 hasMany 关系与 ember 数据一起使用

标签 javascript ember.js ember-data

我无法获得 embedded hasMany正确处理 ember 数据。

我有这样的东西

App.Post = DS.Model.extend({
  comments: DS.hasMany('App.Comment')
});

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

我的 API 返回以下 GET /post :
[
  {
   id: 1
   comments: [{name: 'test'}, {name: 'test2'}]
  },
  ...
]

我需要用 POST /post 发送这个:
[
  {
    comments: [{name: 'test'}, {name: 'test2'}]
  },
  ...
]

我想使用 Ember 模型并让他们提出适当的请求:
var post = App.store.createRecord(App.Post, hash_post_without_comments);
post.get('comments').createRecord(hash_comment);

App.store.commit(); // This should call the POST api 


var posts = App.store.find(App.Post); // This should call the GET api 

当我尝试类似 post: DS.hasMany('App.Post', {embedded: true}) ,GET 正在工作,但 POST 正在尝试为这两条记录创建一个 POST,而不仅仅是父记录。

编辑:我的真实用例

1-我刚刚从 master 构建了 ember 数据

2-我的适配器:RESTAdapter

3- 序列化器:JSONSerializer

4-我添加了
App.MyAdapter.map('App.Join', {
    columns: { embedded: 'always' }
});

5- 我的模型是:
App.Join = DS.Model.extend({
    rowCount: DS.attr('number'),
    columns: DS.hasMany('App.JoinColumn'),
});

App.JoinColumn = DS.Model.extend({
    join: DS.belongsTo('App.Join')
});

6- 何时:
var a = App.Join.find(1);
a.get('columns').createRecord({});
App.store.commit();

joincolumn 的 POST 已发送且父级不脏

我错过了什么?

最佳答案

在 master 上,正确的 API 是:

App.Adapter.map('App.Post', {
  comments: { embedded: 'always' }
});
embedded 的两个可能值是:
  • load :加载时嵌入子记录,但应保存为独立记录。为了使它起作用,子记录必须有一个 ID。
  • always :加载时嵌入子记录,并保存嵌入在同一记录中。这当然会影响记录的脏度(如果子记录发生更改,适配器会将父记录标记为脏)。

  • 如果您没有自定义适配器,可以调用map直接上DS.RESTAdapter :
    DS.RESTAdapter.map('App.Post', {
      comments: { embedded: 'always' }
    });
    

    关于javascript - 如何使嵌入的 hasMany 关系与 ember 数据一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320925/

    相关文章:

    ember.js - Ember JS : why are destroyed records committed back to the server?

    javascript - 长按按键时自动调整tinymce的大小

    javascript - 单击“取消”按钮后 Internet Explorer 停留在当前页面

    javascript - 获取postgres-query的结果作为nodejs中的变量

    ember.js - MODEL_FACTORY_INJECTIONS 和夹具

    ember.js - 不再能够绑定(bind)到 Ember 中的全局数据结构?

    JavaScript:数组与对象数组

    ember.js - Ember 2 : Truncate text and add ellipses

    ember.js - 编写 Ember.js 异步测试助手和涉及异步操作的测试

    javascript - Ember 数据 JSON-RPC 请求示例