[Xerte] Having problems duplicating nodes

Paul Swanson Paul.Swanson at harlandfs.com
Thu Dec 4 19:32:41 GMT 2008


I think the problem is where I take the quiz part of templateData and
assign it to quizData:
 
quizData = templateData.quiz[0]; // non-randomized questions
 
randomQuizData = templateData.quiz[0]; // for randomized questions
randomQuizData.question.randomize(); // randomize the list of questions.

All of the questions are between the <quiz> </quiz> tags, and there is
only one set of those. To indicate which lesson the question is for, I
have an attribute for the <question> tag (lesson="1", lesson="2", etc.).
Then I try to get just the lesson 1 questions with:
 
// create arrays for lesson 1 quiz
lesson1quiz = new Array ();
wrapupQbuilt = new Array (); // for questions
wrapupBuilt = new Array (); // for question answers
wrapupTracking = new Array ();
wrapupAnswers = new Array ();
 
lesson1Counter = 0; // counter for number of questions
 
// loop through all questions to get lesson 1
for (i = 0; i < quizData.question.length; i++) {
 
  if (quizData.question[i].lesson == '1') {
  
    lesson1quiz[lesson1Counter].question = quizData.question[i];
    lesson1Counter++;
 
  } // end of quizData.question[i] conditional
 
  myCounter = i + 1;
 
} // end of for loop
 
// create the right number of questions
if (wrapupQbuilt[lesson1Counter] != 'true') {
 
icon.nextSibling.childNodes[6].childNodes[0].childNodes[2].childNodes[0]
.childNodes[1].duplicate(lesson1Counter-1);
}
wrapupQbuilt[lesson1Counter] = 'true';
 
But when I print lesson1quiz.length for debugging purposes, it prints 0,
I was expecting it to print 2. Yet if I hard code the index of the
lesson1quiz to get a question, it does appear. Hard code 0 and it pulls
the second question, hard code 1 and it prints the first question
(backwards from what I expected, but the order isn't important), so
there must be something in the lesson1quiz array.
 
Paul



________________________________

	From: xerte-bounces at lists.nottingham.ac.uk
[mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of Julian Tenney
	Sent: Thursday, December 04, 2008 12:58 AM
	To: Xerte discussion list
	Subject: RE: [Xerte] Having problems duplicating nodes
	
	

	What you describe sounds right. I think the index is correct
(and that' backed up by the fact you use the same var to display the
current page number to the user).

	 

	So if that is indeed correct, then it must be an issue with
reading the data out of the xml data. Are you using th index in the
right part of the templateData path?

	 

	From: xerte-bounces at lists.nottingham.ac.uk
[mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of Paul Swanson
	Sent: Wednesday, December 03, 2008 10:04 PM
	To: Xerte discussion list
	Subject: RE: [Xerte] Having problems duplicating nodes

	 

	Well, apparently I was. I had the duplicate code in the entry
frame of lesson 1, so I guess it was executing each time I moved from
page to page in lesson 1? I moved the code to just above the interface
icon (so it can only run once), made the necessary changes to the
childNodes structure, and it was still acting funny. I then found that I
had both a variable and an icon id of 'lesson1Counter' so it's no wonder
it was acting inconsistently. ;o)  I fixed that and now I'm consistently
getting the correct number of question nodes.

	 

	I still have one problem though: it only displays one question.
When I get to the first question node, it displays the question
correctly, the second node displays the same question, and if I back up
to the first question node, it's blank.  Here is the code where I get
the question number:

	 

	questIndex = icon.parentNode.index() - 1;

	 

	The script icon with this code is the first icon in the proto
Wrap Up page (what I was calling the question node above), and the proto
Wrap Up page is the second child of the wrap up framework (the Entry
Frame being the first child), so questIndex should be 0 for the first
question, and 1 for the next, right? I'm using questIndex+1 for a page
counter, and that is correctly displaying 1 for question 1 and 2 for
question 2, but the questions don't change. Any insight on that?

	 

	Thanks for all your help!

	 

	P

		 

		
________________________________


		From: xerte-bounces at lists.nottingham.ac.uk
[mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of Julian Tenney
		Sent: Wednesday, December 03, 2008 12:45 PM
		To: Xerte discussion list
		Subject: RE: [Xerte] Having problems duplicating nodes

		You're not duplicating icons more than once are you?
When you call duplicate, you are manipulatingthe xml in the rlo file:

		 

		//this makes n + 1 children on icon.nextSibling:

		icon.nextSibling.firstChild.duplicate(n);

		 

		//call it again (perhaps because we revisit this page):

		icon.nextSibling.firstChild.duplicate(n);

		 

		//how many children?

		debug(icon.nextSibling.childNodes.length); //duh. Twice
as many as I needed.

		 

		//so, only let the duplicate run once, 'cos if we
revisit a page, we'll end up with too many xml nodes...

		if (someFlag != true){

		  duplicate(....make icons here...);

		  someFlag = true;

		}

		 

		//i tend to do it like this, so duplicate code in icon
will only ever run once:

		if (icon.attributes.built != 'true'){

		  //duplicate and other logic here

		  icon.attributes.built = 'true';

		}

		 

		sort that out and the see if you've got any issues left.
The thing is that 'icon' refers to the underlying xml node - that is key
to understanding what's happening with duplicate(); make sure the code
that builds the piece only runs once.

		 

		J

		 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.nottingham.ac.uk/pipermail/xerte/attachments/20081204/ec0d8b66/attachment.html


More information about the Xerte mailing list