JSON嵌套结构上的骨干:使用单个模型来操纵整个结构

时间:2013-09-07 07:50:18

标签: json backbone.js

我有以下JSON结构:

{
"Results": {
    "Package": [{
        "@ID": "a1a2a3a4",
        "Name": "Package Name",
        "Category_ID": {
            "@Product_Line_ID": "11",
            "#text": "11"
        },
        "Effective_Start_Date": "2013-08-09",
        "Available_Start_Date": "2013-08-09",
        "Product_Name": "Web National Promotion",
        "Product_To_Product": [{
            "@ID": "b1b2b3b4",
            "Association_Start_Date": "2013-08-09",
            "Max_Occurs": "1",
            "Min_Occurs": "1",
            "Product": [{
                "@ID": "a5a6a7a8",
                "Name": "Product Name 1",
                "Effective_Start_Date": "2013-08-05",
                "Available_Start_Date": "2013-08-05"
                },{
                "@ID": "a5a6a7a8",
                "Name": "Product Name 2",
                "Effective_Start_Date": "2013-08-05",
                "Available_Start_Date": "2013-08-05"
                etc............

我不会创建模型,关系,集合等的复杂结构。(此JSON具有嵌套元素的复杂结构

包   - Product_to_Product     - 产品     - 产品等   - Charge_to_Carge     - 收费     - 收费 等...

我想知道是否有办法创建Backbonde的单个实例,例如“Package”节点,以及从该节点访问其他子节点和信息。

请告诉我你可能的解决方案来管理这个复杂的结构,以及从模型“包”到内部孩子的可能性(代码)。

谢谢

CHARLS

1 个答案:

答案 0 :(得分:0)

使用任何嵌套结构创建Backbone模型非常简单:

var Package = Backbone.Model.extend();
var package = new Package({
        "@ID": "a1a2a3a4",
        "Name": "Package Name",
        "Category_ID": {
            "@Product_Line_ID": "11",
            "#text": "11"
        },
        "Effective_Start_Date": "2013-08-09",
        "Available_Start_Date": "2013-08-09",
        "Product_Name": "Web National Promotion",
        "Product_To_Product": [] // might have nested objects
});
package.get("Name"); // Package Name
package.get("Category_ID").get("#text"); // TypeError: no get method found

但是,您可以从中获得的唯一优势是在直接属性(@IDNameCategory_ID等上使用Backbone.Model API和事件,而不是{{模型的1}},@Product_Line_ID)。因此,访问模型的内部对象与访问javascript对象的方式类似。

如果您的模型确实有一个有意义的结构,并且已经定义了一些关系(比如Package和Products之间的一对多关系),那么我建议您查看一些Backbone扩展,它们真的会对您有所帮助。其中一个扩展名为Backbone Associations