2012-12-04 12 views
9

Ich versuche, die Phonegap-Benachrichtigung zu verwenden, um eine Fehlermeldung in meiner Phonegap-App anzuzeigen, und erlaube dem Benutzer dann, den Fehler per E-Mail zu senden. Das einzige Problem ist, dass ich die Fehlermeldung nicht an die Callback-Funktion übergeben kann, wodurch die E-Mail unbrauchbar wird.Zwei Argumente mit navigator.notification.confirm übergeben?

Der Code Ich habe sieht nun wie folgt aus:

function displayError(errormsg) { 
    navigator.notification.confirm(
            errormsg, 
            onConfirm, 
            'Error', 
            'Submit, Cancel' 
            ); 
} 
function onConfirm(buttonIndex){ 
    if (buttonIndex === 1){ 
     alert(errormsg); 
    } 

} 

die durch displayError("Test") genannt wird, die den Fehler Inhalt Test machen würde. Ich möchte dann errormsg an onConfirm weitergeben, aber ich weiß nicht, wie das geht, oder wenn es möglich ist.

Eine mögliche Lösung, die ich erwäge, war dies:

function displayError(errormsg) { 
    test = errormsg 
    navigator.notification.confirm(
            errormsg, 
            onConfirm, 
            'Error', 
            'Submit, Cancel' 
            ); 
} 
function onConfirm(buttonIndex){ 
    if (buttonIndex === 1){ 
     alert(test); 
    } 

} 

Aber das ändert nichts an der errormsg wenn ein neuer Fehler angezeigt wird. Ich habe dies bestätigt, weil meine App in der Simulatoreinstellung zwei Fehler verursacht. Die erste funktioniert einwandfrei, wenn diese Methode verwendet wird, und zwar test, aber der zweite Fehler, der direkt folgt, verwendet die ursprüngliche Variable anstelle der letzten.

Antwort

34
function displayError(errormsg) { 
    navigator.notification.confirm(
     errormsg, 
     function(buttonIndex){ 
      onConfirm(buttonIndex, errormsg); 
     }, 
     'Error', 
     'Submit, Cancel' 
     ); 
} 
function onConfirm(buttonIndex, errormsg){ 
    if (buttonIndex === 1){ 
     alert(errormsg); 
    } 

} 

Was ist damit in einer anonymen Funktion Verpackung? Auf diese Weise können Sie beliebig viele Parameter übergeben und gleichzeitig den Umfang beibehalten.

+0

Funktioniert perfekt. Ich dachte nicht einmal daran ... – Charlie

+0

das hilft auch, wenn Sie den Umfang behalten müssen und 'var self = this' anstelle von' this' verwenden. Danke für die Idee! – escapedcat

+0

Ich frage mich, warum 22 Benutzer diese Antwort uplooted, aber die Frage nicht upvote. Das Bewertungssystem in dieser Seite lässt viel zu wünschen übrig ... – andreszs