【问题标题】:Saving a hasMany relationship containing array of IDs back to REST server using Ember-Data使用 Ember-Data 将包含 ID 数组的 hasMany 关系保存回 REST 服务器
【发布时间】:2013-09-10 03:29:06
【问题描述】:

我正在使用 Ember-Data 1.0 Beta 2。

我有一个模型,该模型包含一个包含 ID 列表作为数组的属性。它被定义为 hasMany 关系,见下文:

Lrt.User = DS.Model.extend({ 
jobRole: hasMany('jobRole', {async:true, embedded:'always'}),
});

当我执行 model.save() 时,POST 有效负载显示“jobRole”为空,如 []。

如何使用 Ember-Data 保存 hasMany 关系?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    如果您使用 hasMany,那么您希望将 'jobRole' 设置为一组活动的 JobRole 对象,而不是一组 ID。

    // assume role1 and role2 are JobRole objects
    // obtained via store.find()  (or something...)
    someUser.set('jobRole',[role1,role2]);
    

    或者,如果您想使用 ID 列表设置属性,那么您可以只使用非类型化的 DS.attr 并且数组将按原样传递。

    Lrt.User = DS.Model.extend({ 
      jobRole: DS.attr()
    });
    
    //then later
    someUser.set('jobRole',[1,42]);
    

    【讨论】:

    • 好吧,我很困惑,因为在文档中,它声明它需要一个 ID 列表而不是对象。它现在正在工作,如果我从服务器返回一个 ID 列表,hasMany 关系会从服务器加载相关模型,然后它们可以作为单独的模型对象在应用程序的其他地方使用。这样,他们不是只能在这个模型中使用吗?如果我能收到一份 ID 列表,我不知道为什么它不会发回。
    • 这只是上下文问题。在 Ember 应用程序本身内部,它总是想要处理真实对象之间的关系。这就是为什么您可以调用user.get('jobRole') 并取回JobRole 对象的实时集合,即使您从服务器传递的是JobRole id 的数组。相反,当您保存关系时,Ember 仍然希望在内部处理活动对象,但它只想将这些对象的 ID 发送回服务器。我希望这是有道理的。
    • 我还是有点困惑。 REST 适配器向服务器发出对模型的请求。 'jobRole' 的 JSON 有效负载带有一组 ID,这些 ID 数据连接到实际的模型对象。我是否应该从 REST 服务器返回 JSON 有效负载中每个 jobRole 对象的完整 pojo?其他一切都在将 ID 列表保存回服务器。
    • 通过使用async : true,您是在告诉 Ember 您希望将这些对象与主模型分开交付。您可以使用async : false(或只是省略异步参数),但随后您需要“侧载”该数据。这里的“cmets”数组是一个侧面加载的例子:emberjs.com/guides/models/connecting-to-an-http-server/…
    • 太棒了!行。就我而言,侧载是要走的路。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多