2012-10-05 2 views
2

버튼을 누른 시간을 추적하는 스크립트를 만들고 싶습니다. javascript는 정적 변수에 대한 지원이 부족하지만 일반적으로 대상 함수 외부에서 변수를 정의 할 수있는 해결 방법이 될 수 있습니다.핸들러에서 정적 변수를 사용할 수 있습니까?

그럼에도 불구하고 이것은 간단한 Google 스크립팅 웹 응용 프로그램에서 나에게 적합하지 않습니다. 코드는 다음과 같으며 템플릿 웹 응용 프로그램의 간단한 확장입니다.

누구나 어떻게 달성 할 수 있는지 알고 있습니까?

은 구글 응용 프로그램의 코드입니다 :

// Script-as-app template. 

function doGet() { 
    var app = UiApp.createApplication(); 
    var button = app.createButton('Click Me'); 
    app.add(button); 
    var label = app.createLabel('The button was clicked.') 
       .setId('statusLabel') 
       .setVisible(false); 
    app.add(label); 
    myClickHandler.counter = 0; 

    var handler = app.createServerHandler('myClickHandler'); 
    handler.addCallbackElement(label); 
    button.addClickHandler(handler); 

    return app; 
} 

function myClickHandler(e) { 
    var app = UiApp.getActiveApplication(); 

    var label = app.getElementById('statusLabel'); 
    label.setVisible(true); 
    label.setText('Clicked ' + myClickHandler.counter + ' times.') 
    myClickHandler.counter++; 
    //app.close(); 
    return app; 
} 

답변

2

즉, 여기에 값을 저장하는 숨겨진 위젯을 사용하여 그 중 하나를 달성하기 위해 몇 가지 방법이 있습니다.

function doGet(){ 
    var app = UiApp.createApplication(); 
    var button = app.createButton('Click Me'); 
    app.add(button); 
    var counterValue = 0; 
    var label = app.createLabel('The button was clicked.') 
       .setId('statusLabel') 
       .setVisible(false); 
    var counter = app.createHidden('counter').setId('counter').setValue(counterValue)    
    app.add(label).add(counter); 

    var handler = app.createServerHandler('myClickHandler'); 
    handler.addCallbackElement(counter); 
    button.addClickHandler(handler); 

    return app; 
} 

function myClickHandler(e) { 
    var app = UiApp.getActiveApplication(); 

    var label = app.getElementById('statusLabel'); 
    label.setVisible(true); 
    var counterValue = Number(e.parameter.counter) 
    var counter = app.getElementById('counter') 
    counterValue++; 
    counter.setValue(counterValue.toString()) 
    label.setText('Clicked ' + counterValue + ' times.') 
    return app; 
} 
+0

저는 좀 더 뻔뻔한 것을 찾고 있었지만, 이것이 정말로 트릭을 만들었다는 것을 부정 할 수는 없습니다. 고맙습니다! – luimarma

관련 문제