0

私は Photoshop のプラグイン スクリプトに取り組んでいますが、本当に奇妙な問題に遭遇しています。この問題を抱えている最も近い人はここにあります。ローカル変数?

彼の解決策を読んで構文をくまなく調べたところ、修正しなかった問題が見つからず、もう一度やり直しました。後で完全なコードを含めますが、問題の要点は次のとおりです。このオブジェクトを宣言することにより、グローバル空間でこのオブジェクトを宣言しています。これは関数の外部のメンバーです。

prefs = new Object();
prefs.db_file = "";
prefs.bk_file = "";

prefs.text = new Object();
prefs.text.top = 0.6;
prefs.text.bottom = 0.9;
prefs.text.padding = 0.05;
prefs.text.size = 12;
prefs.text.shadow = true; 

基本的な概要 (疑似コード):

declare global variables
main() {

Dialogue()

do stuff with the variables
}

Dialogue() {
    declare new window
    accept user interaction
    store in global variable
}

変数が存在し、値が正しいたびに、変数を監視するextendscriptデバッガーでこれを数回実行しましたが、Dialogue()関数を終了すると、存在する唯一の変数はprefs.textです。シャドウと prefs.text.size

「.text」の削除など、私が試したすべてのこと。一部は同じを返しました。構文が間違っているかどうか、それが間違っている場合は、なぜすべての設定をしないのかわかりません。変数が消える?そして、すべての変数が同じように扱われることはかなり確信しています。

2013 年 10 月 22 日更新:構文の問題を除外するために、JSlint を見つけてコードを実行し、提示された問題を調べて修正しました。残っている唯一の問題は、「var」選択のグループ化です。オブジェクトの宣言方法、コードの順序、不要な「;」がインデントの標準化に変更されました。結果:同じ。同じ変数が削除され、同じ出力が返されます。

完全なコードは次のとおりです。

#target photoshop
app.bringToFront();

prefs = new Object();
prefs.db_file = "";
prefs.bk_file = "";

prefs.text = new Object();
prefs.text.top = 0.6;
prefs.text.bottom = 0.9;
prefs.text.padding = 0.05;
prefs.text.size = 12;
prefs.text.shadow = true;



function main() {

Dialogue();

var db_file2 = new File(prefs.db_file);

db_file2.open('r');
var data = Array();
var str = "";
var data_str = "";
while(!db_file2.eof) {
    str = db_file2.readln(); 
    data.push(str.split(","));
    data_str += str;
};

db_file2.close();
alert(data_str);



};

function Dialogue() {

var dlg = new Window ("dialog","Create New Slide Set");
    dlg.orientation = "row";
    dlg.alignChildren = "fill";
    dlg.pref_group = dlg.add("group");
        dlg.pref_group.orientation = "column";
        dlg.pref_group.alignChildren = "fill";

        dlg.pref_group.db_val =    dlg.pref_group.add("edittext",undefined,prefs.db_file);
        dlg.pref_group.db_find =  dlg.pref_group.add("button",undefined,"select data file");
        dlg.pref_group.db_find.onClick = function() { 
            selectedFile = File.openDialog("Please select CSV  file.","CSV File:*.csv"); 
            if(selectedFile != null) {
                dlg.pref_group.db_val.text =  decodeURI(selectedFile.fsName); 
                prefs.db_file = dlg.pref_group.db_val.text;
                };
        };
        dlg.pref_group.db_val.onChange = function() {
            prefs.db_file = dlg.pref_group.db_val.value;
            alert("db_file has been changed!");
        };

        dlg.pref_group.bk_val = dlg.pref_group.add("edittext",undefined,prefs.bk_file);
        dlg.pref_group.bk_find = dlg.pref_group.add("button",undefined,"select background image");
        dlg.pref_group.bk_find.onClick = function() { 
            selectedFile = File.openDialog("Please select PNG file.","Image File:*.png"); 
            if(selectedFile != null) { 
                dlg.pref_group.bk_val.text =  decodeURI(selectedFile.fsName); 
                prefs.bk_file = dlg.pref_group.bk_val.text;
                };
        };
        dlg.pref_group.bk_val.onChange = function() {
            prefs.bk_file = dlg.pref_group.bk_val.value;
        };


        dlg.pref_group.tt_grp = dlg.pref_group.add("group");
        dlg.pref_group.tt_grp.orientation = "row";
        dlg.pref_group.tt_grp.alignChildren = "fill";
        dlg.pref_group.tt_grp.tt = dlg.pref_group.tt_grp.add("statictext",undefined,"Text Top");

        dlg.pref_group.tt_grp.tt_dsp = dlg.pref_group.tt_grp.add("edittext",undefined,prefs.text.top);
        dlg.pref_group.tt_grp.tt_dsp.preferredsize = [100,200];

        dlg.pref_group.tt_grp.tt_dsp.onChange = function() {

            prefs.text.top = dlg.pref_group.tt_grp.tt_dsp.value;
         };

        dlg.pref_group.bt_grp = dlg.pref_group.add("group");
        dlg.pref_group.bt_grp.orientation = "row";
        dlg.pref_group.bt_grp.alignChildren = "fill";
        dlg.pref_group.bt_grp.bt = dlg.pref_group.bt_grp.add("statictext",undefined,"Text bottom");
        dlg.pref_group.bt_grp.bt_dsp = dlg.pref_group.bt_grp.add("edittext",undefined,prefs.text.bottom);
        dlg.pref_group.bt_grp.bt_dsp.preferredsize = [100,200];

        dlg.pref_group.bt_grp.bt_dsp.onChange = function() {

            prefs.text.bottom = dlg.pref_group.bt_grp.bt_dsp.value;
         }; 

        dlg.pref_group.pd_grp = dlg.pref_group.add("group");
        dlg.pref_group.pd_grp.orientation = "row";
        dlg.pref_group.pd_grp.alignChildren = "fill";
        dlg.pref_group.pd_grp.pd = dlg.pref_group.pd_grp.add("statictext",undefined,"Padding");
        dlg.pref_group.pd_grp.pd_dsp = dlg.pref_group.pd_grp.add("edittext",undefined,prefs.text.padding);
        dlg.pref_group.pd_grp.pd_dsp.preferredsize = [100,200];

        dlg.pref_group.pd_grp.pd_dsp.onChange = function() {

            prefs.text.padding = dlg.pref_group.pd_grp.pd_dsp.value;
         };

        dlg.pref_group.sd_grp = dlg.pref_group.add("group");
        dlg.pref_group.sd_grp.orientation = "row";
        dlg.pref_group.sd_grp.alignChildren = "fill";
        dlg.pref_group.sd_grp.sd = dlg.pref_group.sd_grp.add("statictext",undefined,"Shadow");
        dlg.pref_group.sd_grp.sd_dsp = dlg.pref_group.sd_grp.add("checkbox",undefined,"");
        dlg.pref_group.sd_grp.sd_dsp.value = prefs.text.shadow;

        dlg.pref_group.sd_grp.sd_dsp.onChange = function() {

            prefs.text.shadow = dlg.pref_group.sd_grp.sd_dsp.value;
         }; 

        dlg.ok_group = dlg.add('group');
        dlg.ok_group.orientation = "column";
        dlg.ok_group.ok_btn = dlg.ok_group.add("button",undefined,"ok"); 
        dlg.ok_group.ok_btn.onClick = function() {


            prefs.text.shadow = dlg.pref_group.sd_grp.sd_dsp.value;
            prefs.text.padding = dlg.pref_group.pd_grp.pd_dsp.value;
            prefs.text.bottom = dlg.pref_group.bt_grp.bt_dsp.value;
            prefs.text.top = dlg.pref_group.tt_grp.tt_dsp.value;
            prefs.bk_file = dlg.pref_group.bk_val.value;
            prefs.db_file = dlg.pref_group.db_val.value;
            dlg.close(0);

        };

dlg.center();
dlg.show();
    };

main();
4

1 に答える 1

1

とてもシンプルでした...

'edittext' ボックスには .value プロパティがありません。それらには .text プロパティがあります。.value にアクセスしようとすると、null が返され、変数が破棄されました。

私の調査では、多くの領域、構文規則、JSlint、オブジェクト定義、皮肉なことに別の問題 (onChange 関数が呼び出されていない) を調べて、無視されていなかった唯一の変数がシャドウ チェックボックスであることに気付きました。 、およびフォント サイズ パラメータが含まれていましたが、この時点ではフォント サイズ パラメータはまったく編集されておらず、チェックボックスで定義されているのは影だけでした。教訓: 何かが部分的に機能している場合、機能している部分の類似点を比較する

于 2013-10-22T20:14:13.273 に答える