Невозможно применить настройки из гаджета на боковой панели. - PullRequest
3 голосов
/ 07 января 2011

Хорошо, я не эксперт в Sidebar Gadgets, но у меня есть этот проект, который мне придется сделать для школы.Я пытался решить это самостоятельно, но я действительно застрял.

Мне придется использовать Cirip API (Cirip.ro - своего рода Twitter), и для использования API мне нужно ввестиИмя пользователя.Я делаю это с помощью настроек, но при закрытии настроек эффекта нет.

Вот код, но он довольно грязный.Я не веб-программист, поэтому javascript / html является новым для меня.

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

РЕДАКТИРОВАТЬ: Хорошо, поэтому я немного сузил его и оптимизировал мой код здесь, но он все еще не работает.Я сделал это как можно проще.

В основном html у меня есть это:

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

В 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);
}

В файле settings.html:

<body>

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

В файле 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();

        }
    }
}

Я действительно не могу понять это.Вывод этого "неопределен".

1 Ответ

2 голосов
/ 07 января 2011

У меня нет распаковщика RAR на этой машине, поэтому я не могу взглянуть на файл, но могу дать вам несколько советов по сохранению настроек. Если вам нужна дополнительная помощь, попробуйте вставить код в свой вопрос (см. Мой комментарий выше).

При работе с настройками вам нужно перехватить событие System.Gadget.onSettingsClosing в вашем коде JavaScript. В этом обработчике событий вы можете либо сделать настройки временными, установив свойства в окне гаджета, либо сделать их полупостоянными, используя System.Gadget.Settings.write для сохранения настроек. Допустим, ваше имя пользователя / пароль html выглядит так:

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

Ваш JavaScript должен выглядеть примерно так:

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();
    }
}

В JavaScript вашего основного гаджета settingsHaveChanged может выглядеть примерно так:

function settingsHaveChanged () {
    var username = System.Gadget.Settings.read("username"),
        password = System.Gadget.Settings.read("password");

    sendAPIRequest(username, password);
}
...