【问题标题】:saving form with associated model保存带有关联模型的表格
【发布时间】:2013-02-08 15:55:25
【问题描述】:

它看起来很简单,但我坚持这个。我有一个控制器和一个专用于订单模型的视图,它有嵌套的客户端。我在 setupController 上创建空记录:

路线:

ShowroomApp.OrdersRoute = Ember.Route.extend
  model: ->
    ShowroomApp.Order.createRecord()
  setupController: (controller,model) ->
    model.set("client", ShowroomApp.Client.createRecord() )
    controller.set("content", model )

控制器:

save: ->
  @content.store.commit()

在 OrdersController 上,我有保存操作来提交表单中所做的更改。它会为每个模型生成两个单独的 POST 请求,但关联不会自行建立。 Orders 模型先保存,client_id 显然为 null,因为 client 尚不存在。后来去客户端发布并保存客户端,但订单模型不知道它并且没有客户端。

有什么解决办法吗?

谢谢, J

【问题讨论】:

    标签: ember.js associations ember-data


    【解决方案1】:

    这是由于一个突出的 ember 数据问题 - RESTAdapter: Allow new parent, child to be saved at once

    查看Tom Dale's Comment 了解可能的解决方法。它涉及手动添加对同时保存两条记录的支持。

    作为替代方案,您可以考虑将onCreate 回调添加到父记录,然后在回调中创建子记录。如果您可以接受第二次 commit(),这将完成工作。

    【讨论】:

    • 谢谢,这个问题把我逼疯了。最后我已经破解了你所说的 didCreate 事件:@client.one 'didCreate'。我最终向服务器发出了 3 个请求,所以它不是最佳的,但可以工作。
    • 我发现不幸的是,手动添加记录根本不起作用。即使我将客户端记录指定为 @order.set('client', @client) 并反转 @client.get('orders').pushObject @order - 更新会以 client_id = null 进入服务器
    • 我最终使用 jquery.ajax 序列化记录并将它们保存在控制器操作中。老实说,这很丑陋,所以不能等待合适的适配器解决方案。
    • 奇怪,我们在应用程序中使用了 onCreate 回调。我注意到的一件事是父记录的 id 直到 runloop 完成后才会改变。所以在父级的onCreate回调中,需要Ember.run.next
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2015-06-10
    • 2015-06-21
    • 2011-08-01
    相关资源
    最近更新 更多