+1 On 3/15/12 9:51 AM, "[email protected]" <[email protected]> wrote:
>I know we have been throwing around the idea of replacing channel with an >eventing module. > >I agree the channel code is rather large and complex and I am sure we can >get all the functionality we need with an eventemitter interface and >named events. > > >Sent on the TELUS Mobility network with BlackBerry > >-----Original Message----- >From: Patrick Mueller <[email protected]> >Date: Thu, 15 Mar 2012 12:45:31 >To: <[email protected]> >Reply-To: [email protected] >Subject: Re: git commit: [CB-299] cordova.js should allow for registering > plugins as required before deviceready fires. Use for CupcakeStorage on >Android. > >On Wed, Mar 14, 2012 at 19:02, <[email protected]> wrote: > >> Updated Branches: >> refs/heads/master e71e51e88 -> efdcd7703 >> >> [CB-299] cordova.js should allow for registering plugins as required >> before deviceready fires. Use for CupcakeStorage on Android. >> >> Project: >>http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo >> Commit: >> >>http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/efdcd7 >>70 >> Tree: >> >>http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/efdcd770 >> Diff: >> >>http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/efdcd770 >> ... >> >> >> >>http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/efdcd770 >>/lib/channel.js >> ---------------------------------------------------------------------- >> diff --git a/lib/channel.js b/lib/channel.js >> old mode 100644 >> new mode 100755 >> index 9beed93..baf08b6 >> --- a/lib/channel.js >> +++ b/lib/channel.js >> @@ -46,6 +46,45 @@ var Channel = function(type, opts) { >> create: function (type, opts) { >> channel[type] = new Channel(type, opts); >> return channel[type]; >> + }, >> + >> + /** >> + * cordova Channels that must fire before "deviceready" is >>fired. >> + */ >> + deviceReadyChannelsArray: [], >> + deviceReadyChannelsMap: {}, >> > >So, this is kind of a nasty pattern - keeping two data structures around >when one will suffice, as there's the problem of these getting out of sync >if code changes in the future. > >Then I looked at channel.join. :-) > > join: function (h, c) { > var i = c.length; > var len = i; > var f = function() { > if (!(--i)) h(); > }; > for (var j=0; j<len; j++) { > !c[j].fired?c[j].subscribeOnce(f):i--; > } > if (!i) h(); > }, > >Yikes! Not terribly understandable, especially since it's not immediately >obvious how a method like join() should work in the first place. But the >good news is, I think we could go to a single "map" and not use the array, >since it doesn't need to be an array. We can change the for loop to a for >(var key in map) loop, and then reference c[key] in the body of the loop >instead. > >Issues? > >-- >Patrick Mueller >http://muellerware.org >
