复制现有对象

时间:2014-05-01 17:59:35

标签: javascript

我有点困惑。

基本上,framerjs将我的photoshop文档导出到HTML5网站。所有元素似乎都在PSD对象中。我可以通过PSD [“元素的名称”]来处理我的文档的每个项目。 Framer称这些“观点”。所以可以通过myNewView = new View()创建一个新视图;一个视图可以包含文本,图像等。到目前为止,这么好。

我正在尝试以下操作:从每个现有视图中,我想创建一个显示原始视图名称的新视图。新观点应该是可单独添加的。

var ypsilon = 30;

// go through all Elements in PSD
for (var layerGroupName in PSD) {
var newView = PSD[layerGroupName].name + "_new";
var newViewName = PSD[layerGroupName].name + "_new";

//create the new view
newView = new ImageView({x:20, y:ypsilon, width:400, height:30});

// name the new view
newView.name = newViewName;

// style for the new view
newView.style = {
            "font-family": "Arial",
            "font-size": "18px",
            "font-weight": "bold",
            "text-align": "left",
            "color": "white"
            }
// show the new view
newView.html = newViewName;

// position the next view y+30px
ypsilon = ypsilon + 30;

}

这就是我所拥有的,我知道为什么这是错误的。我可以看到所有新的观点,但我不能用他们的名字来对待他们。我只能说“newView”。我知道for循环在这种情况下是错误的,所以我一直覆盖newView而不是像“layerGroupName_new”那样。我还没有设法使用.lenght,这是我使用for循环的想法。所以我现在陷入困境,如果你们中的一些好人能帮助我,我将非常高兴。

1 个答案:

答案 0 :(得分:0)

如果您不需要直接按名称访问视图,则可以将它们全部放在数组上并迭代它们。另一种方法是使用名称作为键将它们存储在对象上,这将允许您通过名称来访问它们。

两种方法的演示:

var ypsilon = 30;

// Using an array
var views = [];

// Using an object
var viewDictionary = {};

// go through all Elements in PSD
for (var layerGroupName in PSD) {
    var newView = PSD[layerGroupName].name + "_new";
    var newViewName = PSD[layerGroupName].name + "_new";

    //create the new view
    newView = new ImageView({x:20, y:ypsilon, width:400, height:30});

    // name the new view
    newView.name = newViewName;

    // style for the new view
    newView.style = {
                "font-family": "Arial",
                "font-size": "18px",
                "font-weight": "bold",
                "text-align": "left",
                "color": "white"
                }
    // show the new view
    newView.html = newViewName;

    // position the next view y+30px
    ypsilon = ypsilon + 30;

    views.push(newView);

    viewDictionary[newViewName] = newView;
}

// Looping over all the views and acting on them
for (var i = 0, view; i < views.length; i ++) {
    view = views[i];
    // do stuff with view
}

// Accessing a specific view by name via the viewDictionary
var view = viewDictionary['myViewName_new'];