ObjectMap hides the whole WeakMap vs. Map vs. Object / any stuff, so it just seems convenient, while still trying to be performant and reducing strong references.
Worked well for XMLNotifier. On 11/13/2021 6:12 PM, Greg Dove wrote: > Using ObjectMap could be an option if you want both SWF and JS code to run, > but is not really warranted IMO if the main goal is to migrate away from > SWF, because the api is the same as Map, and is indirect use of the Map - > so why add the extra overhead? Also if you can avoid switching the original > code to the new api in some cases, when all that is needed (for string > keys) is an object hash, so that's why I think that's a bit easier. After > porting 8 or 9 codebases now, this is simply the approach I have settled on > in these cases. > > What I hope to do is get something similar to work, but for it to use the > original dynamic access that works for flash.utils.Dictionary for both > targets instead of switching both implementations to use the approach that > Map uses (get/set/delete methods). That's not possible simply using > javascript Proxy, but it will be possible using some compiler smarts and > internal use of WeakRef in js implementation in the case of weak keys. > Something for later... > > > > > > On Sun, Nov 14, 2021 at 12:57 PM Edward Stangler > wrote: > >> Why not use org.apache.royale.utils.ObjectMap? >> >> >> >> On 11/13/2021 3:24 PM, Greg Dove wrote: >>> Sure, if you want, Andrew. This is the way I do it currently, and in some >>> cases this has been done within the current framework code (e.g. in Crux >>> code there is some use of Map to replace Dictionary in js, iirc) >>> >>> I do expect to come up with an approach that works much closer to the >>> original flash Dictionary using a combination of compiler support, >> similar >>> to thej [RoyaleArrayLike] support and framework code (which would use the >>> relatively recent WeakRef support in js). >>> I also believe it will be possible to match flash event listener apis >> with >>> support for weak listeners (also using WeakRef - and I would add event >>> priority support at the same time). >>> But both of these updates would be opt-in and would only be for quite >>> modern browsers, but would allow for more unchanged code when porting >>> legacy apps. At the moment these are just ideas/vague plans, I need to >> find >>> the time for that. >>> >>> >>> >>> >>> On Sun, Nov 14, 2021 at 10:07 AM Andrew Wetmore wrote: >>> >>>> Greg, can I throw that into documentation as a workaround? >>>> >>>> On Sat., Nov. 13, 2021, 4:45 p.m. Greg Dove, wrote: >>>> >>>>> Hi Hugo, >>>>> >>>>> I might change this in the near future. But for now, here is the >> general >>>>> 'rule of thumb' that I use: >>>>> >>>>> If the instance only has string keys (or int/uint/Number/Boolean keys >>>>> should be ok too) then use a plain Object. All code can pretty much >> then >>>>> remain unchanged. >>>>> >>>>> If it is using object instances (any complex object like functions or >>>> class >>>>> instances, or generic object instances) as keys, then >>>>> >>>>> a) use native js Map if the original constructor argument does not have >>>>> weakKeys=true, or if it has weakKeys= true and there is any form of >>>>> iteration over keys (you cannot iterate over keys in a WeakMap in >>>>> javascript) >>>>> >>>>> b) otherwise use WeakMap. >>>>> >>>>> Both (a) and (b) require you to change code for get/set ([] >>>>> access/assignment in as3) or delete operator, and also code related to >>>>> iteration (use map.forEach in js). >>>>> see docs for those: >>>>> >>>>> >> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map >> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap >>>>> >>>>> >>>>> On Sun, Nov 14, 2021 at 9:34 AM Hugo Ferreira <hferreira...@gmail.com> >>>>> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> I see that there is no Dictionary on Royale, probably because there is >>>> a >>>>>> better method. >>>>>> What the approach in Royale for a Dictionary ? >>>>>> >>