发送POST ajax以将产品添加到报价单中

时间:2013-02-19 13:44:33

标签: ajax backbone.js many-to-many backbone-relational

我的背景比前端更像服务器端。所以我可能缺乏一些基本的前端知识。

我有一个名为

的端点
/quotations/:id/products

如果您执行POST操作,则表示您要将产品添加到指定的报价单,其中:id表示报价ID。

在我的架构中,引用和产品之间存在多对多的关系。

端点还希望数据以products[]

的形式发送

意思是说,如果我想将id为2,7和154的产品添加到报价单3

我正在张贴

<input name="products[]" value="2" />
<input name="products[]" value="7" />
<input name="products[]" value="154" />

到网址/quotations/3/products

我的问题是如何使用Backbone为此设置创建模型和视图?

我买了Addy Osmani关于开发Backbone.js应用程序的书。所以我设置的骨干类似于his example

只有一个straight forward add model的例子。

希望我得到的答案遵循Osmani为将父母加入父母行为而制定的惯例。

Osmani还提到了Backbone Relational

我不确定我是否应该使用这个甚至是如何使用它。我已经阅读了文档,但我不确定如何将其与Osmani构建Backbone示例应用程序的方式相结合。

更新

如果成功,我希望页面重定向到另一个名为/success的页面。

如果失败,我希望页面在某处显示失败消息。假设我有<div id="message"></div>要更新。

换句话说,对于失败,页面保持为单页应用程序。

为了成功,页面会转到另一页。

对于返回JSON回复等的服务器端代码,我可以毫无问题地执行此操作。假设我使用PHP。

1 个答案:

答案 0 :(得分:2)

我最近遇到了类似的问题,我无法确定这是最好的方法,但这是我发现可靠的工作方式。我试过BackboneRelational,但遇到了麻烦。

这假设您需要创建Quote对象&amp;产品报价分1步。

  • 设置新报价的视图

  • 初始化此视图时:

    A)创建一个新的空引用模型

    B)为ProductQuotes创建一个新集合

    C)为您要添加的每个ProductQuote创建一个新的ProductQuote视图

    D)将Quote视图订阅到自定义Backbones事件绑定(Backbone JS: can one view trigger updates in other views?),即

    Backbone.pubSub.on('quote_new-product-save', this.AddProduct, this)

    此视图现在会在您触发此事件时调用AddProduct。

  • 在初始化每个ProductQuote视图时,创建一个新的产品模型

  • 连接此视图供您的用户填写任何适用的信息&amp;完成后,将此信息设置为该视图产品型号&amp;触发上面提到的“quote_new-product-save”事件并将其传递给该产品模型。

  • 回到Quote视图中,AddProduct将自动被调用,因为它绑定到此事件。你应该连接这个以接收新的产品型号&amp;将其添加到ProductQuotes集合中。

  • 现在您已将产品模型数据设置为ProductQuotes集合,但这仍然没有直接链接到当前的Quote(仍未保存),因此请将模型的'order_items'属性设置为您的ProductQuote集合中的所有模型,即

    this.model.set('product_quotes', this.collection.models)

现在,未保存的Quote模型会将ProductQuotes集合的所有成员设置为属性。

现在你需要在Quote模型&amp;上调用save。将数据发送到服务器。这里要记住的是你的urlRoot设置正确&amp;正在格式化发送到服务器的数据。我建议阅读Saving nested objects with Rails, backbone.js, and accepts_nested_attributes_for关于覆盖Quote模型中的toJSON方法。