Hi Aaron,

I didn't experience the recursion error you're mentioning in 3).

Since your comments were very interesting and wanting to investigate
this further, I opened a new topic:
http://groups.google.com/group/mootools-users/browse_thread/thread/7e3ce3a75a9f771

On Nov 11, 10:28 pm, Aaron Newton <[email protected]> wrote:
> A couple of general observations.
>
> 1) options should in principal be read-only (in my opinion). They aren't
> where I prefer to keep state. I move that into either class properties
> (this.foo = this.options.foo) or into a state object (this.state.foo =
> this.options.foo).
>
> 2) If you want to serialize the options that instantiated the class, JSON
> encode the options. If you want to serialize the state, serialize
> this.state. Now you have the ability to recreate the class.
>
> 3) options can't ever have instances of other classes as properties; you'll
> get a recursion error. If you want a class to have a reference to another,
> add a setter method or a getter method in your options (this.fx =
> this.options.getFx());
>
> 4) In your code example below, you have a lot of getters that are the same
> pattern:
>
>       getEndDateTime: function() {
>                return this.options.endDateTime;
>        },
>
> This kind of repetition isn't necessary. Either write a .get method that
> takes as its argument the option name or write a loop that loops over the
> options and creates these getters. At least that's what I'd do.
>
> -A
>
>
>
>
>
>
>
> On Fri, Nov 11, 2011 at 1:28 AM, Blackbird <[email protected]> wrote:
> > Hi,
>
> > I'm using Mootools classes extensively in my business logic. I would
> > like to encode only the "options" of corresponding instances in JSON.
> > Automatically.
>
> > Let me take an example. Encoding an instance of the following class:
>
> > ########
> > var Activity = new Class({
> >    Implements: [Options],
>
> >        initialize: function(options) {
> >                this.options = options;
> >        },
>
> >        options: {  // Defaults
> >                "vehicles": []
> >        },
>
> >        getId: function() {
> >                return this.options.id;
> >        },
>
> >        getStartDateTime: function() {
> >                return this.options.startDateTime;
> >        },
>
> >        getEndDateTime: function() {
> >                return this.options.endDateTime;
> >        },
>
> >        getOriginStation: function() {
> >                return this.options.originStation;
> >        },
>
> >        getDestinationStation: function() {
> >                return this.options.destinationStation;
> >        },
>
> >        getComment: function() {
> >                return this.options.comment;
> >        },
>
> >        getVehicles: function() {
> >                return this.options.vehicles;
> >        }
> > });
> > ########
>
> > Now, calling "JSON.encode(myActivity)" will result in the following
> > JSON:
>
> > ########
> > {
> >    "options":{
> >        "startDateTime":"2011-11-11T05:12:22.850Z",
> >        "endDateTime":"2011-11-11T05:27:22.850Z",
> >        "originStation":{
> >            "$caller":null,
> >            "caller":null,
> >            "options":{
> >                "code":"CST",
> >                "name":"Stockholm C"
> >            }
> >        },
> >        "destinationStation":{
> >            "$caller":null,
> >            "caller":null,
> >            "options":{
> >                "code":"CST",
> >                "name":"Stockholm C"
> >            }
> >        },
> >        "vehicles":[
> >            {
> >                "$caller":null,
> >                "caller":null,
> >                "options":{
> >                    "id":"2110",
> >                    "type":"RABe525"
> >                }
> >            }
> >        ],
> >        "trainNumber":"8424",
> >        "tractionType":"M1"
> >    },
> >    "$caller":null,
> >    "caller":null
> > }
> > ########
>
> > But I would like only the "options" to be encoded, which would result
> > in the following JSON:
>
> > ########
> > {
> >    "startDateTime":"2011-11-11T05:12:22.850Z",
> >    "endDateTime":"2011-11-11T05:27:22.850Z",
> >    "originStation":{
> >        "code":"CST",
> >        "name":"Stockholm C"
> >    },
> >    "destinationStation":{
> >        "code":"CST",
> >        "name":"Stockholm C"
> >    },
> >    "vehicles":[
> >        {
> >            "id":"2110",
> >            "type":"RABe525"
> >        }
> >    ],
> >    "trainNumber":"8424",
> >    "tractionType":"M1"
> > }
> > ########
>
> > Is there a way to do this automatically?

Reply via email to