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? 
}
4

2 に答える 2

0

コンテキストなしでdoSomethingを呼び出しています。

func.applyを使用します。

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

そして、オブジェクトを「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? 
}
于 2012-07-23T18:58:08.580 に答える
0

dlgグローバルに宣言する代わりに、イベント ハンドラーに渡してみてください。

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

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

このアプローチを取る場合はvar dlb、混乱を避けるためにグローバルに宣言しないでください。(変数をシャドーイングすることは一般的に悪い習慣です)

于 2012-07-23T18:56:23.527 に答える