Now the problem I'm having is that it seems if a user preference is
going to be hidden it has to be a string (http://code.google.com/apis/
gadgets/docs/reference.html#Userprefs_Ref), when I need it to be an
array. Any ideas how to get around this?
New updated code:
<UserPref name="songArray" datatype="hidden"/>
in the script section:
var prefs = new _IG_Prefs();
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
var song_xml =
xsltProcessor.transformToFragment(xml,document);
var s = new XMLSerializer();
var song = s.serializeToString(song_xml);
var songArr = prefs.getArray('songArray');
// if there are already songs in array
if(songArr.length > 0)
{
var last_song = String(songArr.slice(songArr.length-1));
}
else // array is empty
{
songArr.push(song);
}
document.getElementById(id).innerHTML = "";
for(i=0; i<songArr.length; i++)
{
//document.getElementById(id).appendChild(songArr[i]);
document.getElementById(id).innerHTML = songArr[i];
}
prefs.setArray('songArray', songArr);
As of now, it outputs: [object DocumentFragment]
On Sep 25, 10:48 am, jamim <[EMAIL PROTECTED]> wrote:
> Thanks for the help. I'll try getting that to work.
>
> On Sep 25, 8:34 am, Matt Foster <[EMAIL PROTECTED]> wrote:
>
> > I don't believe that any object in preferences is going to save a DOM
> > node. You could serialize it into an HTML string and save that.
>
> > On Sep 24, 3:50 pm, jamim <[EMAIL PROTECTED]> wrote:
>
> > > I've now noticed that what appears to be saved, may not be what I
> > > intended. What is returned from prefs.getArray is a DocumentFragment
> > > as expected, but it doesn't have any childNodes, which is unexpected.
> > > Not sure how to view exactly what info is in there, but it doesn't
> > > seem to be complete.
>
> > > On Sep 24, 12:42 pm, jamim <[EMAIL PROTECTED]> wrote:
>
> > > > Ya, I did create a new instance of the _IG_Prefs class at the
> > > > beginning of my script.
>
> > > > I tried setting the prefs array like you recommended - with the entire
> > > > array and not each individual element but it didn't work either.
> > > > Looks like that way, the array isn't even saved when I click on
> > > > another tab and then back to the Playlist tab (the way it was working
> > > > previously).
>
> > > > I had though that the items would be added to the array individually
> > > > based on the documentation
> > > > here:http://code.google.com/apis/gadgets/docs/legacy/fundamentals.html#list
> > > > specifically, this line "For example, the following excerpt adds the
> > > > values "Nokia" and "CNET" to the list: " when read in context, seemed
> > > > to imply that.
>
> > > > On Sep 24, 12:11 pm, Matt Foster <[EMAIL PROTECTED]> wrote:
>
> > > > > You probably have done this as you noted it in the subject, but i
> > > > > didn't see it in the code. Although prefs is used throughout the
> > > > > entire documentation, it is not actually a global variable in the
> > > > > gadget environment. It is an instance of the _IG_Prefs class.
>
> > > > > var prefs = new _IG_Prefs(); // as noted you probably know this but
> > > > > just covering the bases.
>
> > > > > Where I think your real problem lies is in the prefs.setArray
> > > > > execution. It is expecting to receive the entire array, where you're
> > > > > iterating over that array and sticking each item inside, this is in
> > > > > essence overwriting the last value each iteration, not to mention the
> > > > > fact that its the wrong data type, its expecting an array.
>
> > > > > prefs.setArray("songArray", songArr);
>
> > > > >http://code.google.com/apis/gadgets/docs/legacy/reference.html#Core
>
> > > > > On Sep 23, 3:32 pm, jamim <[EMAIL PROTECTED]> wrote:
>
> > > > > > I'm trying to save an array, and it is saving if I click on another
> > > > > > tab and then back to this "Playlist" tab, but when the page is
> > > > > > refreshed (and this tab is on a timer to refresh every 30 seconds)
> > > > > > the
> > > > > > array is lost. The data that populates the array is retrieved from
> > > > > > an
> > > > > > xsl file and each element is a DocumentFragment (a fragment of a
> > > > > > document tree). Here's my code:
>
> > > > > > var xsltProcessor = new XSLTProcessor();
> > > > > > xsltProcessor.importStylesheet(xsl);
> > > > > > var song = xsltProcessor.transformToFragment(xml,document);
> > > > > > songArr = prefs.getArray('songArray');
>
> > > > > > // if there are already songs in array
> > > > > > if(songArr.length > 0)
> > > > > > {
> > > > > > var last_song = songArr.slice(songArr.length-1);
>
> > > > > > // if new song isn't already in array
> > > > > > if(last_song.childNodes[2].textContent !=
> > > > > > song.childNodes[2].textContent)
> > > > > > {
> > > > > > if(songArr.length != 5) // if array isn't
> > > > > > "full"
> > > > > > {
> > > > > > songArr.push(song);
> > > > > > }
> > > > > > else
> > > > > > {
> > > > > > songArr.shift();
> > > > > > songArr.push(song);
> > > > > > }
> > > > > > }}
>
> > > > > > else // array is empty
> > > > > > {
> > > > > > songArr.push(song);}
>
> > > > > > document.getElementById(id).innerHTML = "";
> > > > > > for(i=0; i<songArr.length; i++)
> > > > > > {
> > > > > > document.getElementById(id).appendChild(songArr[i]);
> > > > > > prefs.setArray('songArray', songArr[i]);
>
> > > > > > }
>
> > > > > > As of now, only one song is ever getting output. I'm trying to
> > > > > > output
> > > > > > 5. The complete code for the gadget is
> > > > > > here:http://kexp-developing-gadget.googlecode.com/svn/trunk/kexp_rss_gadge...
>
> > > > > > Thanks.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"iGoogle Developer Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/Google-Gadgets-API?hl=en
-~----------~----~----~----~------~----~------~--~---