2012-07-23 51 views
0

如果這是基本的,我很抱歉。我是自學成才的,堅持使用JavaScript編程的簡單功能。任何人都可以告訴我,我應該尋找什麼來尋找正確的答案,或者幫助我解決這個問題?如何從函數中獲取UI變量

我有一個UI窗口內的功能,以快速填充面板。但我似乎無法將輸入到每個面板的值輸入到用戶界面的外部,並進入主要的「DoSomething」功能。
變量(dlg.tryThis)不會更新?爲什麼?我需要做什麼?

// making a simple UI 
function UI_Builder(doSomething) 
{ 
    var dlg = new Window("dialog", "options"); 
    dlg.mainGroup = dlg.add("group", undefined,"main"); 

//Created a simple function so I can re-create panels and values very easy 
    function makePanel (panelName, val) { 
     var newPanel = eval("dlg.mainGroup." + panelName); 
     newPanel = dlg.mainGroup.add('panel', undefined, panelName); 
     newPanel.Start = newPanel.add("edittext", [0,0,30,20], val); 
     dlg.Start = newPanel.Start.text 
     newPanel.Start.onChanging = function()     
       { 
       dlg.Start = newPanel.Start.text 
        alert("Changed " + panelName + " to: " + dlg.Start) // THIS alerts correctly. It know what value I changed and where I changed it. 
       return dlg.Start; 
       } 
      return dlg.Start; 
     } 

    // calling the function to create panels. 
    dlg.tryThis = makePanel("tryThis", 4); 
    dlg.anotherOne = makePanel("anotherOne", 3); 
    dlg.again = makePanel("again", 2); 

    dlg.mainGroup.btnCancel = dlg.mainGroup.add("button",[0,0,130,70], "doSomething"); 
    dlg.mainGroup.btnCancel.onClick = function() 
    { 
     doSomething(); 
    } 
return dlg 
} 

// all the UI builder is doing is showing the UI 
var dlg = UI_Builder(doSomething); 
dlg.show(); 

function doSomething() 
{ 
dlg.close(); 

alert(dlg.tryThis) // this is not the NEW value? How do I get it to be the NEW value updated by the ".onChanging" function? 
} 
+2

'eval'是** **邪 - 'dlg.mainGroup [panelName]'會給你一樣的 – Andreas 2012-07-23 18:52:26

+0

你使用的是什麼UI庫? – davidbuzatto 2012-07-23 18:54:13

回答

0

試圖通過dlg到事件處理程序,而不是在全球宣佈它的:

dlg.mainGroup.btnCancel.onClick = function() { 
    doSomething(dlg); 
} 

function doSomething(dlg) { 
    dlg.close(); 
    alert(dlg.tryThis); 
} 

如果採取這種方法,你應該不會宣佈var dlb全球範圍內,以避免混亂。 (陰影變量通常是一種不好的做法)

0

你在沒有任何上下文的情況下調用doSomething。

使用func.apply:

dlg.mainGroup.btnCancel.onClick = function() 
{ 
    doSomething.apply(this, []); 
} 

和處理的對象 '這個':

function doSomething() 
{ 
    this.close(); 
    alert(this.tryThis) // this is not the NEW value? How do I get it to be the NEW value updated by the ".onChanging" function? 
}