2013-02-19 30 views
1

我的背景比服务器端更多。所以我可能缺乏一些基本的前端知识。发送POST ajax将产品添加到报价

我有一个端点叫

/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" /> 

到url /quotations/3/products

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

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

只有一个例子straight forward add model

希望我能得到一个答案,遵循奥斯马尼关于将孩子添加到父母行为类型中的规定。

奥斯马尼还提到约Backbone Relational

我不确定我是否应该使用这个或甚至如何。我已经阅读了文档,但我不确定如何将这个融入到Osmani构建他的Backbone示例应用程序的方式中。

UPDATE:

如果它是成功的,我想在网页重定向到被称为/success另一页。

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

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

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

至于返回JSON回复等的服务器端代码,我可以做到这一点没有任何问题。假设我使用PHP。

+0

你是否将表单输入为查询字符串或JSON?如果你可以修改你的服务器端代码来返回JSON,你应该修改它以接受JSON,除非它已经做到了。 – jevakallio 2013-03-02 10:08:38

回答

2

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

此处假定您需要在1个步骤中创建报价对象& ProductQuotation。

  • 建立一个视图用于新的报价

  • 在这种观点下的初始化:

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

    B)创建ProductQuotes

    一个新的集合

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

    d)订阅的报价查看到自定义事件的骨干网结合(Backbone JS: can one view trigger updates in other views?),即

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

    这一观点现在会叫你addProduct命令触发此事件的任何时候。

  • 在初始化每个ProductQuote视图中创建一个新的产品型号

  • 线这一观点为您的用户填写任何适用的信息&当他们完成设置此信息给意见产品型号&触发“ quote_new-product-save“事件并将其传递给该产品模型。

  • 回到报价视图,AddProduct会自动被调用,因为它被绑定到这个事件。您应该将此线路接收到新产品型号&将其添加到ProductQuotes集合。

  • 因此,现在您的产品型号数据集已设置为您的ProductQuotes集合,但仍未与当前报价(尚未保存)直接关联,因此请将模型上的'order_items'属性设置为all模型的ProductQuote集合中即

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

现在未保存的报价车型将拥有您的收藏ProductQuotes设置为属性的所有成员。

现在你需要调用保存在报价模型&发送数据到服务器。这里要记住的是你的urlRoot设置正确&发送到服务器的数据格式正确。我建议您阅读Saving nested objects with Rails, backbone.js, and accepts_nested_attributes_for,以在您的报价模型中重写toJSON方法。

相关问题