[Seaside] registerObjectForBacktracking, submit and execute block
wahboh at mac.com
Sun Aug 29 14:43:58 CEST 2004
Ok, that makes sense, didn't know that it used an array internally.
Any ideas of how to make backtracking work for adding / removing items
from a collection?
Somebody must have tried before ;)
On 2004-08-29, at 12.29, radoslav hodnicak wrote:
> On Sun, 29 Aug 2004, radoslav hodnicak wrote:
>> Registering object for backtracking doesn't do what you probably
>> think it does. It's only sensitive to changes of objects, *not*
>> holder := WAStateHolder new.
>> holder contents: (OrderedCollection with: 1 with: 2).
>> holder contents add: 3. "NO CHANGES HERE, STILL THE SAME OBJECT IN
>> holder contents: (holder contents copyWith: 3). "NEW OBJECT IN HOLDER,
>> WILL BACKTRACK"
> Ok I didn't explain this good enough - backtracking works for changing
> object state too - but it works on shallow copy so the changes it can
> detect are only one level deep.
> Take this example with OrderedCollection. The items are internally
> held in
> an array.
> anOrederedCollection (object1)
> --has anArray(items ...) (object2)
> when you register object1 for backtracking, it makes a shallow copy of
> which means they share the same instance of object2. And on backtrack,
> looks whether object1 = object1 copy - and it does, because adding and
> removing items changed the same array (object2). If you changed a
> instvar holding a string or whatever, then it would work as expected.
> Clear enough?
> gentleman, n. - a man who knows how to blog, but doesn't
> Seaside mailing list
> Seaside at lists.squeakfoundation.org
More information about the Seaside