我的背景比前端更像服务器端。所以我可能缺乏一些基本的前端知识。
我有一个名为
的端点/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。
答案 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方法。