繁体   English   中英

某些全局(类)变量在javascript中消失了? (Photoshop)

[英]certain global(class) variables disappearing in javascript? (photoshop)

我正在为Photoshop制作插件脚本,遇到一个非常奇怪的问题,最有这个问题的人在这里: 为什么尝试多次调用它们或将它们分配给Javascript时类变量没有消失?局部变量?

因此,阅读他的解决方案后,我梳理了语法,找不到未解决的问题,然后重试。 我将稍微包含完整的代码,但这是问题的要点,我在全局空间中通过声明了该对象及其在函数外部的成员,从而声明了该对象:

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();

非常简单...

'edittext'框不具有.value属性,而具有.text属性,尝试访问.value返回null并破坏了变量。

我的研究将我带入了很多领域,语法约定,JSlint,对象定义,具有讽刺意味地研究了一个不同的问题(未调用onChange函数)使我意识到,唯一不被忽略的变量是阴影复选框,以及font size参数,但此时一点都没有编辑font size参数,并且阴影是复选框唯一定义的内容。 获得的经验:当某些部分工作时,比较工作部分的相似之处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM