Thanks for your suggestions and recommendations...
On Oct 10, 6:08 am, T.J. Crowder t...@crowdersoftware.com wrote:
Hi,
Your problem is in your Test class. You're creating an `options`
object on the prototype of your class, which means that it will be
*shared* by all instances of your class. Since your constructor is
writing to properties on that shared object, naturally multiple calls
to the constructor overwrite each others' values:
var t1 = new Test(0, {first: 'Fred', last: 'Flintstone'});
var t2 = new Test(1, {first: 'Barney', last: 'Rubble'});
alert(t1.options.first); // Alerts Barney, not Fred
A lot of times, you *do* want to put defaults for properties on the
prototype and the override them (if necessary) on the instance itself
(it's more memory-efficient to share default values; the instance will
get its own copy if you assign a value to it on the instance), but
you're not doing that -- you're writing to properties of the property
(`this.options.first`), not the property itself (`this.options`).
The fix in your case is simple: Remove the `options` property from
your `Class.create` call and instead put it in the constructor
function:
Test = Class.create({
initialize:function(count,obj){
this.options = {};
this.options.id = count;
this.options.first = obj.first;
this.options.last = obj.last;
}
});
That was the minimalist change; you can make it a bit more brief:
Test = Class.create({
initialize:function(count,obj){
this.options = {
id: count,
first: obj.first,
last: obj.last
};
}
});
Barring other issues (I haven't read through the other code in detail,
this jumped right out at me), that should sort it out.
Off-topic: It looks odd that you don't have `var` in front of your
various class names, e.g. `var Test = Class.create` rather than `Test
= Class.create`. Have you already declared the vars somewhere else?
It's just, if you haven't, you're relying on the horror that is
JavaScript's implicit globals[1], which I would STRONGLY recommend
against doing.
[1]http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html
HTH,
--
T.J. Crowder
Independent Software Engineer
tj / crowder software / com
www / crowder software / com
On Oct 10, 4:25 am, Steven Albarracin stevenalbarra...@gmail.com
wrote:
/*
Basically I'm trying the pass an array of objects and pass them into
the Test class, but it only seems to be passing in the last object in
the array...
*/
// class to store the id, first, last name
Test = Class.create({
options:{},
initialize:function(count,obj){
this.options.id = count;
this.options.first = obj.first;
this.options.last = obj.last;
}
});
// the array of the first and last name items
people = [{first:Santa,last:Claus},
{first:John,last:Doe},
{first:Jane,last:Johnson}];
// displaying the items to FF console,
// open your console and click on the object and hit options to see
the parameters
Start ={
init:function(people){
people.each(function(obj,count){
//this shows looping through the array correctly
Start.log(obj);
//in theory this should be showing the class with
each array item
instead it s storing the last item
Start.log(new Test(count,obj));
});
},
log:function(message){
if(window.console console.log) console.log(message);
}
};
Start.init(people);
/*
console will show something like this
Object { first=steven, more...}
Object { options=Object} -- click these, notice they dont match
the object above instead show last item
Object { first=John, more...}
Object { options=Object} -- click these, notice they dont match
the object above instead show last item
Object { first=Jane, more...}
Object { options=Object} -- click these, notice they dont match
the object above instead show last item
Can someone tell me whats wrong here, thanks
*/
--
You received this message because you are subscribed to the Google Groups
Prototype script.aculo.us group.
To post to this group, send email to prototype-scriptacul...@googlegroups.com.
To unsubscribe from this group, send email to
prototype-scriptaculous+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/prototype-scriptaculous?hl=en.