backbone.js模型可以包含多个集合吗?

时间:2012-07-26 18:38:11

标签: backbone.js backbone-views backbone.js-collections

我刚开始使用backbone.js并尝试围绕建模概念。我想使用骨干js创建一个购物车应用程序,与第三方REST api连接(不是rails,无法修改)。

这是GET购物车内容的JSON响应示例:

        {
          "_v" : "12.3",
          "currency" : "USD",
          "product_sub_total" : 96.00,
          "product_total" : 86.00,
          "shipping_total" : null,
          "tax_total" : null,
          "order_total" : null,
          "product_items" : 
          [
            {
              "product_id" : "123",
              "item_text" : "Product foo",
              "quantity" : 2.00,
              "product_name" : "foo",
              "base_price" : 30.00,
              "price" : 60.00
            },
            {
              "product_id" : "456",
              "item_text" : "Product foo",
              "quantity" : 1.00,
              "product_name" : "bar",
              "base_price" : 40.00,
              "price" : 40.00,
              "price_adjustments" : 
              [
                {
                  "promotion_id" : "10% off",
                  "promotion_link" : "http://example.com/dw/shop/v12_3/promotions/10_percent_off",
                  "item_text" : "10% off",
                  "price" : -4.00
                }
              ]
            }
          ],
          "order_price_adjustments" : 
          [
            {
              "promotion_id" : "10$ off",
              "promotion_link" : "http://example.com/dw/shop/v12_3/promotions/10_bugs_off",
              "item_text" : "10$ off",
              "price" : -10.00
            }
          ]
        }

查看此JSON数据,有“product_total”和“shipping_total”等聚合数据,并且包含类似“product_items”和“order_price_adjustments”的列表。即使是单个“product_items”也可以嵌套“price_adjustments”列表。

如何在backbone.js中对此购物车进行建模?我应该为我看到的每个哈希创建一个模型(“product_item”,“price_adjustment”),然后建模这些模型的集合,然后制作一个包含这些集合以及聚合数据的篮子模型?我不知道如何处理这个......

1 个答案:

答案 0 :(得分:4)

你可以随心所欲地做到这一点。如果您不需要对项目或价格调整数据进行任何操作,除了访问它之外,我只是将其保留为JavaScript对象。如果您想定义要转换和处理该数据的函数,我会定义ItemPriceAdjustment模型。

当然,您的ShoppingCart模型可以包含名为itemspriceAdjustments的属性,这些属性是包含这些模型的Backbone集合。如果你最终没有将它们定义为模型,只需将它们保留为普通数组即可。

我倾向于在创建Backbone模型方面犯错,因为它很容易做到并且将为您节省更多的麻烦,决定您应该首先将它们定义为Backbone模型。

简而言之,我可能最终得到一个ShoppingCart模型,其中包含ItemsPriceAdjustmentsItem集合,其中包含PriceAdjustment和{{} 1}}模型。即shoppingCart.get('items')会返回Item s。

的集合