2011-01-07 14 views
3

OK, ich bin kein Experte für Sidebar Gadgets, aber ich habe dieses Projekt für die Schule zu machen. Ich habe versucht, es alleine zu lösen, aber ich bin wirklich festgefahren.Die Einstellungen des Sidebar-Gadgets können nicht angewendet werden

Ich werde die Cirip-API verwenden müssen (Cirip.ro ist eine Art von Twitter), und für die Verwendung der API muss ich den Benutzernamen eingeben. Ich mache das mit den Einstellungen, aber beim Schließen der Einstellungen gibt es keine Wirkung.

Hier ist der Code, aber es ist ziemlich chaotisch. Ich bin kein Webprogrammierer, also ist Javascript/HTML für mich neu.

http://www.box.net/shared/7yogevhzrr


EDIT: Ok, so habe ich es verengt sich hier ein wenig und optimiert mein Code, aber es funktioniert immer noch nicht. Ich habe es so einfach wie möglich gemacht.

Im Haupt html Ich habe dies:

<script language="javascript"> 
    document.write(getUserName()); 
</script> 

In den gadget.js:

var userName; 

document.onreadystatechange = function DoInit() { 

    document.body.style.width = 251; 
    document.body.style.height= 351; 
    document.body.style.margin=2; 
    userName="danieliuhasz"; 
    System.Gadget.settingsUI = "settings.html"; 
    System.Gadget.onSettingsClosing = settingsClosed; 

} 

function setUserName(userNameSet){ 

    userName = userNameSet; 
} 

function getUserName(){ 

    return userName; 
} 

function settingsClosed() 
{ 

    var username = System.Gadget.Settings.read("username"); 
    setUserName(username); 
} 

Im settings.html:

<body> 

Username:<br /> 
<input name="userBox" type="text" maxlength="50" /> 
</body> 

In settings.js:

document.onreadystatechange = function DoInit() 
{  

    if(document.readyState=="complete") 
    { 
     var user = System.Gadget.Settings.read("userName"); 

     if(user != "") 
     { 
      userBox.value = user; 
     }  
    }   
} 


System.Gadget.onSettingsClosing = function(event) 
{ 

    if (event.closeAction == event.Action.commit) 
    { 
     var username = userBox.value; 
     if(username != "") 
     { 
       System.Gadget.Settings.write("username", username); 
       System.Gadget.document.parentWindow.settingsClosed(); 

     } 
    } 
} 

Ich kann es wirklich nicht herausfinden. Die Ausgabe davon ist "undefiniert".

+0

Die Ausgabe ist * undefined *, wahrscheinlich, weil Sie die Variable 'username' im Event-Handler' onreadystatechange' gesetzt haben und der 'document.write()' - Block fi ausführt zuerst. Außerdem wird der 'document.write()' Code nicht ausgeführt, nachdem die Einstellungen geschlossen wurden. –

Antwort

2

Ich habe keinen RAR-Entpacker auf dieser Maschine, deshalb kann ich mir die Datei nicht ansehen, aber ich kann Ihnen ein paar Tipps zum Speichern der Einstellungen geben. Wenn Sie weitere Hilfe benötigen, fügen Sie den Code in Ihre Frage ein (siehe obigen Kommentar).

Wenn Sie mit Einstellungen arbeiten, müssen Sie das Ereignis System.Gadget.onSettingsClosing in Ihrem JavaScript-Code abfangen. In diesem Ereignishandler können Sie die Einstellungen entweder vorübergehend festlegen, indem Sie Eigenschaften im Gadget-Fenster festlegen, oder Sie können sie semipermanent machen, indem Sie System.Gadget.Settings.write zum Speichern der Einstellungen verwenden. Angenommen, Ihr Benutzername/Passwort html wie folgt aussieht:

<label for="username">Username: </label><input id="username" type="text"><br/> 
<label for="password">Password: </label><input id="password" type="password"> 

Ihr JavaScript sollte wie folgt aussehen:

System.Gadget.onSettingsClosing = function (event) { 
    // First, we need to make sure the user clicked the OK button to save 
    if (event.closeAction == event.Action.commit) { 
     // If they did, we need to store the settings 
     var username = document.getElementById("username").value, 
      password = document.getElementById("password").value; 

     System.Gadget.Settings.write("username", username); 
     System.Gadget.Settings.write("password", password); 

     /* Finally, we can call a function defined in the main gadget window's 
      JavaScript to let it know that the settings have changed */ 
     System.Gadget.document.parentWindow.settingsHaveChanged(); 
    } 
} 

In Ihrem Haupt-Gadgets JavaScript, settingsHaveChanged aussehen könnte so etwas wie die folgende Funktion:

Verwandte Themen