:: Forum >>
BUG in Model definition : Alex ?
Alex,
Having spent a week working out the code, I think there may be a bug in the definiton of a model (from a control) and the subsequent setting of a a model property to be an array of values.
I posted more information here:
http://www.activewidgets.com/javascript.forum.12190.1/stange-model-behaviour-help-please.html
but, basically if I have initialised my model property to be a primitive type say "" or 0 , then if I susequently assign a array to the property {"0","1","2","3"} then when I call get
XProperty I always get the original primitive value returned.
Looking at the code for setting a proptery I can see that it is trying to handle the setting of various types of objects to a property (_
X, _
X1, _
X2, _
X3 in the control object) definitions based on the provide value tyope (an object (function), an array, a primitive etc).
When the dynamic getter is called for the property it seems to be checking each declaration type ( _
X1, _
X2, _
X3) to see if is set and then return the value assigned.
But because the primitive value (_
X) is not deleted during declaration the get
XProperty code never gets the desired value (_
X1 the array value) to return.
Phew !!
I hope that is all clear. My apologies for bothering you with this Alex (or anyone else!!) but I think this bug (if thats what it is) is failry serious and debilitating in terms of writing your own widgets, where you need to set your own model.
If anyone wants my code to check it for themselves, please do shout !!
Yasdnil
Friday, February 24, 2006
Alex,
Futher to my post, in the setProp method in system/control.js where you assign the array value to the property _p1, should it not also delete this[_p] if a primative types has previously been defined for a property ( as time of model definition) ?
around line 190
this[_p1] = v;
delete this[_p2];
delete this[_p3];
delete this[_p1]; ???????
Yasdnil
Friday, February 24, 2006
Problem solved!!!!
Dont initialise modesl with array primitives - set them explictly.
So:
obj.defineModel("panel", {count:0, heading: [], items: []});
becomes :
obj.defineModel("panel", {count:0});
obj.definePanelProperty("headings", [], true);
obj.definePanelProperty("items", [], true);
and when your template calls getPanelHeadings it returns the array of initialised variables!!
Gotcha of the century this one :)
Yasdnil
Friday, February 24, 2006
Thanks for posting your findings, this is good information for everyone to know.
Jim Hunter (www.FriendsOfAW.com)
Monday, February 27, 2006
This topic is archived.
Back to support forum
Forum search