Loading ...
Sorry, an error occurred while loading the content.

145Re: Modifing Object.prototype kills ajile

Expand Messages
  • mikeizworkin
    Jul 13, 2007
    • 0 Attachment
      Excellent!

      This is precisely the change I mentioned vaguely in my response to your
      last post.

      Great work. I'll be making a new release soon, it will include this as
      well as a few other changes. I'm not sure what else I'll try to squeeze
      in, but since you've already worked it out, maybe I'll be less rushed,
      we'll see.

      Would you by chance be at all interested in helping me create unit
      tests? I'm using the jsUnit framework and have a base set, but it takes
      effort and I may not be able to think of all possibilities on my own...

      --- In ajile@yahoogroups.com, "fawkyoou" <good.midget@...> wrote:
      >
      > Hey Michael,
      >
      > I've been doing some digging, and it appears that this
      > Object.prototype problem may, in fact, be the cause of the Import
      > issues and some other event firing issues that I've noticed.
      >
      > Here's what seems to be happening... Somehow the Object.prototype
      > properties are getting into the members pool of SimpleSet... As
      > handleImportLoaded runs it checks in with isSupported. isSupported
      > calls dependence.get() (Another instance of SimpleSet) which is, in
      > some cases returning a reference to one of the prototypes of Object.
      > Obviously .getAll has not been assigned to that prototype which is
      > throwing out the error. By adding getAll to Object.prototype it
      > eliminates this error, but fails at the subsequent GetModule() call -
      > for obvious reasons (it's not actually one the dependencies it's just
      > a member of Object.prototype)... This of course cancels the remaining
      > execution of handleImportLoaded causing the event not to fire.
      >
      > It's a bit of a hack and you may want to do this checking elsewhere,
      > but modifying line 1001 & 1005 solves the problem and eliminates the
      > need for my workaround hack previously posted.
      >
      > Line 1001 read: if(!supporters || !(supporters = supporters.getAll()))
      > Now reads: if (!supporters || (!(supporters in Object.prototype) &&
      > (supporters.getAll) && !(supporters = supporters.getAll())))
      >
      > Added to line 1005 - befre if(!GetModule...
      >
      > if(!(supporter in Object.prototype))
      >
      >
      > This fix solves BOTH issues I was experiencing...
      >
      >
      > --- In ajile@yahoogroups.com, "iskitzdev" iskitzdev@ wrote:
      > >
      > > Well I tested Ajile 0.7.9 with code that modifies Object.prototype
      and
      > > it works. It seems to handle external Object.prototype changes
      without
      > > problems.
      > >
      > > If you're sure you're seeing the problem with Ajile 0.7.9, please
      > > prepare a working sample that generates the error. It would also be
      > > helpful to turn on debugging then send Ajile's log. To turn on debug
      > > load Ajile with the ?debug as follows:
      > >
      > > <script src="com.iskitz.ajile.0.7.9.js?debug"></script>
      > >
      > > Then add Ajile.ShowLog(); in a script block at the end of your page
      or
      > > in your code after all loading has occurred.
      > >
      > >
      > > Michael
      > >
      > > --- In ajile@yahoogroups.com, "iskitzdev" <iskitzdev@> wrote:
      > > >
      > > > Hey,
      > > > Thanks for the feedback. I recognize the error you're talking
      about
      > > but
      > > > it's a bit strange that it's still happening.
      > > >
      > > > The code you see traversing Object.prototype is there to defend
      > > against
      > > > Object.prototype changes. The associative arrays created and used
      > > within
      > > > Ajile can be affected by external changes to Object.prototype, so
      I
      > > > intentionally wrote code to distinguish between external changes
      and
      > > > what was intended to be there.
      > > >
      > > > For some reason it looks like external changes to Object.prototype
      are
      > > > still able to pollute Ajile's internal associative arrays so I'll
      have
      > > > to spend some time tracking and fixing that. Hopefully it'll be
      quick,
      > > > I'll let you know what I find.
      > > >
      > > > Thanks for the heads up. Glad you find it useful.
      > > >
      > > > -Michael
      > > >
      > > > --- In ajile@yahoogroups.com, "fawkyoou" good.midget@ wrote:
      > > > >
      > > > > Hey Michael,
      > > > >
      > > > > Great work on Ajile. Love it!
      > > > >
      > > > > Found what could be considered a bug... When modifying or
      adding
      > > > > methods to Object it causes Ajile to throw errors.
      > > > >
      > > > > "supporters.getAll is not a function"
      > > > >
      > > > > When switching to use com.iskitz.ajile.0.7.9.src.js the error is
      > > > > triggered @ line 1001. After a cursory inspection, it appears
      that
      > > > Ajile
      > > > > is traversing through [Object].prototype to find members for
      what
      > > I'm
      > > > > assuming is some dependency logic?
      > > > >
      > > > > Here's a quick sample of offending code that will cause the
      error...
      > > > >
      > > > > Object.prototype.inherits = function(obj) {
      > > > > for (var property in obj)
      > > > > {
      > > > > this.prototype[property] = obj[property];
      > > > > }
      > > > > }
      > > > >
      > > > > The following code eliminates the errors but is not a very good
      > > > > solution. It seems to prevent Ajile from generating short names
      for
      > > > > classes on Import (i.e. com.iskitz.ajile becoming simply ajile).
      > > For
      > > > me
      > > > > this is acceptable behavior as I intend to enforce a strict
      policy
      > > of
      > > > > always using the fully qualified namespace when addressing
      classes.
      > > > > However, it may be less than ideal for other users.
      > > > >
      > > > > Object.prototype.getAll = function () {
      > > > > try{
      > > > > return members;
      > > > > } catch(e) {
      > > > > return {};
      > > > > }
      > > > > };
      > > > >
      > > > > I had considered diving a bit deeper into your source, but I
      feel
      > > that
      > > > > it would be more appropriate for you to identify the issue and
      > > provide
      > > > a
      > > > > patched release to the world than to give you some hacked code
      that
      > > > may
      > > > > not be inline with your intentions for Ajile.
      > > > >
      > > > > Thanks so much!
      > > > >
      > > > >
      > > > >
      > > > > [Non-text portions of this message have been removed]
      > > > >
      > > >
      > > >
      > > >
      > > > [Non-text portions of this message have been removed]
      > > >
      > >
      > >
      > >
      > > [Non-text portions of this message have been removed]
      > >
      >
    • Show all 8 messages in this topic