使用Javascript在Photoshop中查找顶层Layerset

时间:2018-08-06 09:17:44

标签: javascript scripting photoshop

我当前的代码很糟糕,这是星期五下午的特别提示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    android:padding="10dip"
    android:orientation="vertical">

    <TextView
        android:id="@+id/teams"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:textSize="25dp"
        android:background="@color/colorAccent"
        android:text="Pakistan vs India" />

    <TextView
        android:id="@+id/bats"
        android:layout_marginTop="20dp"
        android:textStyle="italic"
        android:background="@color/colorAccent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="India is Batting"
        android:textSize="18sp" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_marginTop="20dp"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/team"
            android:layout_width="wrap_content"
            android:textColor="@color/colorPrimary"
            android:layout_height="30dp"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:textSize="28dp"
            android:text="Pakistan" />

        <TextView
            android:id="@+id/overs"
            android:layout_alignParentRight="true"
            android:textColor="@color/colorPrimary"
            android:layout_marginRight="15dp"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:gravity="center"
            android:textSize="28dp"
            android:layout_marginTop="10dp"
            android:text="Overs" />

        <TextView
            android:id="@+id/team_score"
            android:layout_width="wrap_content"
            android:layout_below="@+id/team"
            android:textColor="@color/colorPrimary"
            android:layout_height="30dp"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:textSize="28dp"
            android:text="69-1" />

        <TextView
            android:id="@+id/balls"
            android:layout_alignParentRight="true"
            android:textColor="@color/colorPrimary"
            android:layout_below="@+id/team"
            android:layout_marginRight="15dp"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:gravity="center"
            android:textSize="28dp"
            android:layout_marginTop="10dp"
            android:text="15.5" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </android.support.v7.widget.RecyclerView>

</RelativeLayout>

</LinearLayout>

我这样做是为了概念验证,以查看脚本的其余部分是否有效(确实如此)。

该游戏的目标层我想获得其顶级父级(即文档的第一个子级)的名称。所有块都应该做相同的事情。

我知道有一个更简单的方法可以做到这一点,但是我仍然很新,并且我不确定javascript和photoshop的某些细微差别,因此任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

您可以进行递归操作。它可以替换所有“ if-else if ”语句。

(function getTopLayer(element) {
  if (element.parent == doc && isLayerSet) {
    //do something in this case fileNew.write('foo'); 
  } else {
    getTopLayer(element.parent);
  }
})(layer);

但是请注意,这将无限运行,直到第一个 if 为真。

答案 1 :(得分:1)

您可能只是使用循环将链中的当前parent分配给变量,直到该变量等于doc或达到允许的最大父对象数为止:

function doTheThing(layer) {
  if (!isLayerSet) return;
  var currentLayer = layer;
  for (var parentCount = 0; parentCount < 6; parentCount++) {
    currentLayer = layer.parent;
    if (currentLayer === doc) {
      // do something
      // function call here for better readability
      return;
    }
  }
}