1

我的背景更多是服务器端而不是前端。所以我可能缺乏一些基本的前端知识。

我有一个端点叫

/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 应用程序的书。所以我设置了类似于他的示例的主干。

只有一个直接添加模型的示例。

希望我得到一个遵循 Osmani 为将子级添加到父级行为类型而制定的约定的答案。

Osmani 还提到了Backbone Relational

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

更新:

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

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

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

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

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

4

1 回答 1

2

我最近遇到了类似的问题,我不能肯定地告诉你这是最好的方法,但这是我发现可靠工作的方法。我尝试了 BackboneRelational,但遇到了麻烦。

这假设您需要在 1 步中创建 Quote 对象和 ProductQuotation。

  • 为新报价设置视图

  • 关于这个视图的初始化:

    A) 创建一个新的空报价模型

    B) 为 ProductQuotes 创建一个新集合

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

    D) 将 Quote 视图订阅到自定义 Backbones 事件绑定(Backbone JS:一个视图可以在其他视图中触发更新吗?),即

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

    现在,只要您触发此事件,此视图就会调用 AddProduct。

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

  • 为您的用户连接此视图以填写任何适用的信息,并在完成后将此信息设置为该视图产品模型并触发上述“quote_new-product-save”事件并将该产品模型传递给它。

  • 回到 Quote 视图,AddProduct 将被自动调用,因为它已绑定到此事件。您应该连接它以接收新的 Product 模型并将其添加到 ProductQuotes 集合中。

  • 因此,现在您将 Product 模型数据设置为 ProductQuotes 集合,但这仍然没有直接链接到当前 Quote(仍未保存),因此将模型上的“order_items”属性设置为 ProductQuote 集合中的所有模型IE

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

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

现在您需要在 Quote 模型上调用 save 并将数据发送到服务器。这里要记住的是,您的 urlRoot 设置正确,并且发送到服务器的数据格式正确。我推荐阅读使用 Rails、backbone.js 和accepts_nested_attributes_for 保存嵌套对象,以了解在您的 Quote 模型中覆盖 toJSON 方法。

于 2013-03-07T15:31:31.163 回答