Как передать параметры во всплывающее окно гаджета Windows 7?

#javascript #jquery

#javascript #jquery

Вопрос:

Это мой код, я хочу передать параметры во всплывающую функцию, но она не работает, я удаляю параметры, которые работают. является ли этот код истинным?

 $(document).ready(function() {
    var now = new Date();
    $.ajax({
        type: "GET",
        url: 'http://sarafandnet.com/sites.xml',
        dataType: "xml",
        success: function(xml) {
            $(xml).find('New').each(function() {
                var id = $(this).attr('id');
                var title = $(this).find('title').text();
                var date = $(this).find('date').text();
                var url = $(this).find('url').text();
                var desc = $(this).find('desc').text();

                if (now.getDate() == date) {

                    document.getElementById("td"   date).innerHTML = '<table width="16" border="0" cellspacing="0" cellpadding="0"><tr><td height="21" ><a href="javascript:void(0);" onclick="showFlyout(''   title   '',''   desc   '')" class="lightwindow" height="10px" title="'   title   '" caption="'   desc   '" >click</a></td></tr></table>';
                }
            });
        }
    });
});

function Init() {
    System.Gadget.Flyout.file = "flyout.html";
    // Initialize the Flyout state display.
    if (!System.Gadget.Flyout.show) {
        sFlyoutFeedback.innerText = "Flyout hidden.";
    }
}

function showFlyout(titlee, descc) {
    System.Gadget.Settings.write("title", titlee);
    System.Gadget.Settings.write("desc", descc);

    System.Gadget.Flyout.file = "flyout.html";
    System.Gadget.Flyout.show = true;

}

function showFlyout() {
    System.Gadget.Flyout.show = true;
}

function hideFlyout() {
    oGadgetDocument.getElementById("strFlyoutFeedback").innerText = "Flyout  hidden.";
    System.Gadget.Flyout.show = false;
}
  

Ответ №1:

  1. Вы не можете объявлять функцию с одним и тем же именем более одного раза; даже если функции принимают разные параметры.

    Ваше второе объявление showFlyout (не принимающее параметров) переопределяет первое.

    Если вы хотите такого поведения (необязательные параметры), вы должны сделать что-то вроде этого:

     function showFlyout(titlee, descc) {
        if (arguments.length == 0) {
            System.Gadget.Flyout.show = true;
        } else {
            System.Gadget.Settings.write("title", titlee);
            System.Gadget.Settings.write("desc", descc);
    
            System.Gadget.Flyout.file = "flyout.html";
            System.Gadget.Flyout.show = true;
        }
    }
      
  2. Каждый раз, когда вы вызываете $(this) , вы воссоздаете точно такой же объект jQuery … кэшируете его:

     $(xml).find('New').each(function() {
        var self = $(this); // cache this
    
        var id = self.attr('id'); // now use self instead of this
        var title = self.find('title').text();
        var date = self.find('date').text();
        var url = self.find('url').text();
        var desc = self.find('desc').text();
    
        if (now.getDate() == date) {
    
            document.getElementById("td"   date).innerHTML = '<table width="16" border="0" cellspacing="0" cellpadding="0"><tr><td height="21" ><a href="javascript:void(0);" onclick="showFlyout(''   title   '',''   desc   '')" class="lightwindow" height="10px" title="'   title   '" caption="'   desc   '" >click</a></td></tr></table>';
        }
    });
      
  3. Галерея Windows удалена с прошлой недели, поэтому вы никогда не сможете опубликовать свой гаджет в официальной галерее.

Комментарии:

1. @KassemShehady: Где в предоставленном вами коде вы пытаетесь открыть всплывающее окно с параметрами? Вы не можете передавать параметры при открытии всплывающего окна, вы должны открыть всплывающее окно ( System.Gadget.Flyout.show = true ), а затем установить значение в глобальной области видимости в ( System.Gadget.Flyout.document.parentWindow.someVar = 4 ) из Гаджета, а затем прочитать его во всплывающем окне ( window.someVar )

2. onclick=»showFlyout(» title »,» desc »)» здесь я передаю параметры функции showFlyout, которая сохранит их в system.gadget.settings.write. а затем во всплывающем окне я прочитаю эти переменные, используя system.gadget.settings.read(..)

3. @KassemShehady: Вы читали мой ответ, вы не можете объявлять функцию с одним и тем же именем более одного раза; даже если функции принимают разные параметры. Ваше второе объявление showFlyout (не принимающее параметров) переопределяет первое .. В вашем всплывающем файле используйте System.Gadget.Settings.read (после исправления вашего повторного объявления showFlyout ), и это сработает.