2013-12-17 81 views
1

我很擅长使用现有的数据,但我不是编辑JSON对象的专家,所以这里的一点帮助对我来说会有很大的帮助。据我所知,这可能是一个基本的问题,但我问,因为我不知道。Angularjs - JSON对象编辑

如何更新JSON字符串中的值,如下所示?这是一个kineticjs对象,我需要在重新生成舞台之前禁用可拖动元素。

我创建了一个小提琴基于以下一些投入,但我不是成功的吧: http://jsfiddle.net/8Y6zZ/5/

例如,我想设置"draggable": false,,无论我有"draggable": true, ...我怎么能做到这一点与JavaScript (我正在使用angularjs)。

{ 
    "attrs": { 
     "width": 1276, 
     "height": 660 
    }, 
    "className": "Stage", 
    "children": [ 
     { 
      "attrs": {}, 
      "className": "Layer", 
      "children": [ 
       { 
        "attrs": { 
         "x": 0, 
         "y": 0, 
         "draggable": false, 
         "name": "brochure-1.png" 
        }, 
        "className": "Image" 
       }, 
       { 
        "attrs": { 
         "x": 999, 
         "y": 288, 
         "draggable": true, 
         "name": "sample1.png", 
         "rotation": 0, 
         "scaleX": 1, 
         "scaleY": 1, 
         "offsetX": 0, 
         "offsetY": 0, 
         "skewX": 0, 
         "skewY": 0 
        }, 
        "className": "Image" 
       }, 
       { 
        "attrs": { 
         "x": 301, 
         "y": 115, 
         "draggable": true, 
         "name": "sample2.png", 
         "rotation": 0, 
         "scaleX": 1, 
         "scaleY": 1, 
         "offsetX": 0, 
         "offsetY": 0, 
         "skewX": 0, 
         "skewY": 0 
        }, 
        "className": "Image" 
       } 
      ] 
     } 
    ] 
} 

与此相关的问题,,有没有好办法,从“基本” JSON重新建设,JSON对象......我想什么,我问的是这个...如果在后端的开发者没有好的方法来翻译数据,他们通过组织严重的JSON对象,有没有一种方法来操纵对象来重构它,以便它可以在angularjs中使用。

回答

1

不知道的JSON结构,但如果你可能有一大堆的子对象嵌套,你可以使用简单的递归遍历所有孩子下降..这样的事情:

function setDraggable(obj) { 
    if(obj.attrs) { 
    obj.attrs.draggable = false; 
    } 
    if(!obj.children) { 
    return; 
    } 
    angular.forEach(obj.children, function(o) { 
    setDraggable(o); 
    }); 
} 
+0

其实,是的,因为它是一个kineticjs阶段,可能无限层和对象递归组合是有道理的。我创建了一个小提琴来测试http://jsfiddle.net/BpmTU/4/,你的建议似乎很好。谢谢。 – GRowing

1

使用angular的foreach。然后,您只需将其引导至您的对象中的儿童列表。像这样的东西应该用你的JSON对象的名字替换YOUR_OBJECT。

angular.forEach(YOUR_OBJECT.children.children, function(obj){ 
    obj.attrs.draggable = false; 
}); 
+0

我我不确定我是否遵循。我创建了一个小提琴来尝试它,但我没有得到任何东西http://jsfiddle.net/8Y6zZ/5/ – GRowing