Question

I'm working on a plug-in script for photoshop and I'm encountering a really weird problem, the closest person to have this problem is here : Why do class variables in Javascript disappear when trying to call them multiple times or assigning them to local variables?

So reading his solution I combed over my syntax and I can't find any issues that I didn't correct and try again. I'll include the full code in a bit but here is the gist of the problem, I'm declaring this object in global space by declaring it and it's members outside of functions:

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; 

basic outline (pseudocode):

declare global variables
main() {

Dialogue()

do stuff with the variables
}

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

I've run through this several times, step by step in the extendscript debugger watching the variables, every time the variables exist and the values are correct, until they exit the Dialogue() function then the only variables that exist are prefs.text.shadow and prefs.text.size

everything I've tried, including removing the ".text." part has returned the same. I can't find if my syntax is wrong, if it is wrong than why don't all the prefs. variables disappear? and I'm fairly certain that all the variables are treated the same way.

Update 10-22-2013: To help rule out syntax issues I found JSlint and ran my code through it and went through and corrected the issues it presented. The only issues left are grouping 'var' selections. It changed my object declaration method, some code ordering, unnecessary ';'s standardizing my indents. The Result: The same. The same variables are dropped and the same output is returned.

Here is the full code:

#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();
Était-ce utile?

La solution

it was so simple...

'edittext' boxes don't have .value properties they have .text properties, trying to access .value returned a null and destroyed the variable.

my research took me into a lot of areas, syntax conventions, JSlint, object definitions, ironically looking into a different problem (onChange functions aren't being called) made me realize that the only variables that weren't being disregarded were the shadow checkbox, and the font size parameter, but the font size parameter wasn't being edited at all at this point, and the shadow was the only thing being defined by a checkbox. Lesson learned: when something is partially working compare the similarities of the working part

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top