0

我工作的Photoshop插件腳本,我遇到了一個很奇怪的問題,有這個問題最親近的人是在這裏:Why do class variables in Javascript disappear when trying to call them multiple times or assigning them to local variables?某些全局(類)變量在javascript中消失了嗎? (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調試器觀看變量,每次存在變數和值是正確的,直到他們退出對話()函數,那麼唯一的存在的變量是prefs.text.shadow和prefs.text.size

我試過的一切,包括刪除「.text」。部分已返回相同。我找不到,如果我的語法錯了,如果它是錯誤的,爲什麼不是所有的首選項。變量消失了?我相當肯定所有的變量都以相同的方式處理。

更新10-22-2013:爲了幫助排除語法問題,我找到了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(); 
+1

我已經快速瀏覽了一下。如果你在一個onChange函數之後加入alert,你會注意到這個值是未定義的。不是說這真的有幫助... –

回答

1

它是如此簡單......

「的EditText」盒子沒有.value的性質,他們的屬性.text區段,試圖訪問。價值返回null並銷燬該變量。

我的研究將我帶入了很多領域,語法約定,JSlint,對象定義,諷刺地研究了一個不同的問題(onChange函數沒有被調用),這讓我意識到唯一沒有被忽視的變量是陰影複選框和字體大小參數,但字體大小參數在此處未被編輯,並且影子是由複選框定義的唯一東西。獲得的經驗:當部分工作正在進行時,比較工作部分的相似性