0

我有以下 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 -- 产品 -- Procutct 等 - Charge_to_Carge -- 费用 -- 费用等...

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

请向我展示您管理这种复杂结构的可能解决方案以及从模型“包”访问内部子项的可能方法(代码)。

谢谢

查尔斯

4

1 回答 1

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

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

如果你的模型确实有一个有意义的结构,并且定义了一些关系(比如包和产品之间的一对多关系),那么我建议你看看一些 Backbone 扩展,它们真的会对你有所帮助。一种这样的扩展是Backbone Associations

于 2013-09-07T09:55:32.610 回答