2012-07-23 92 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? 
}