Okay, so the issue is that letsBreakStuff gets iterated together with
the rest of the array, while it should be ignored, as it doesn't have
a numerical index, right?

How does that relate to your patch?

Jörn

On Tue, Jul 1, 2008 at 11:36 AM, Bramus! <[EMAIL PROTECTED]> wrote:
>
> Hi Jörn,
>
> The problem in fact is Ext Related, yet can be reproduced without Ext:
> any library that expands the Array prototype with a function can be
> the wrongdoer.
>
> Create a new blank document (nothing needs to be in it), open up
> firebug and paste in the code below:
>
> Array.prototype.letsBreakStuff = function(){return this};
> correct = [
>    "baa",
>    "bah!",
>    "bar",
>    "bar!",
>    "beblog",
>    "bezar",
>    "blog",
>    "blub",
>    "blub!",
>    "boo",
>    "bramus"
> ];
>
> As you can see this in fact does work correct.
>
> However, I'm a great JSON-addict, and my autocompletion data - just as
> any other call - is returned in the Object Literal Notation (and then
> run through a custom parse function to get an autocomplete compatible
> array).
>
> Now, open up Firebug again and paste in this code:
>
> Array.prototype.letsBreakStuff = function(){return this};
> wrong = { "data":[
>        "baa",
>        "bah!",
>        "bar",
>        "bar!",
>        "beblog",
>        "bezar",
>        "blog",
>        "blub",
>        "blub!",
>        "boo",
>        "bramus"
>    ]
> }
>
> Check wrong.data, you'll see that the last item is the letsBreakStuff
> function.
>
> To make it all complete: the reason I named Ext is that I got the
> remove function as last item on wrong.data ... which is added by Ext:
> Ext.applyIf(Array.prototype,{indexOf:function(C){for(var
> B=0,A=this.length;B<A;B++){if(this[B]==C){return B}}return
> -1},remove:function(B){var A=this.indexOf(B);if(A!=-1){this.splice(A,
> 1)}return this}});
>
> Hope you now see why exactly I suggested that little patch ;)
>
> Regards,
> Bramus!
>
> On Jun 24, 3:57 pm, "Jörn Zaefferer" <[EMAIL PROTECTED]>
> wrote:
>> I don't quite the how the issue is related to ExtJS. It sounds like
>> you pass functions instead of strings to the autocomplete plugin,
>> which is the actual issue here. Could you upload a testpage and post
>> the URL here?
>>
>> Jörn
>>
>> On Tue, Jun 24, 2008 at 1:03 PM, Bramus! <[EMAIL PROTECTED]> wrote:
>>
>> > Filed a ticket on dev.jquery including a .diff 
>> > file:http://dev.jquery.com/ticket/3080
>> > ;-)
>>
>> > Regards,
>> > B!
>>
>> > PS: [autocomplete] prefix seems to be cut off subject?
>>
>> > On Jun 24, 11:15 am, "Bramus!" <[EMAIL PROTECTED]> wrote:
>> >> Hi Jörn et all here at the list,
>>
>> >> I'm using the autocomplete plugin in a project I'm working on and I
>> >> must say: it works great!. However: one part of the project uses ExtJS
>> >> (their tree component is great) and that's where things go wrong.
>> >> Problem is that somewhere in ExtJS they extend Object with a remove()
>> >> function, breaking jQuery.autocomplete.
>>
>> >> After a little quest I found that - quite obviously - autocomplete
>> >> breaks on string manipulations (Function.toLowerCase() doesn't really
>> >> exist ;)) and has a minor issue when displaying the items whenever
>> >> some library has extended Object.
>>
>> >> Here below are the 2 minor changes I implemented in order to make
>> >> things work "just fine" again. Could you tuck 'm into the release as I
>> >> can't commit any changes to the trunk.
>>
>> >> Change #1: Display issue: $.Autocompleter.Select, function fillList():
>> >> replace:
>> >> if (!data[i])
>> >> with:
>> >> if (!data[i] || (data[i].value.constructor === Function))
>>
>> >> Change #2: Selection issue: $.Autocompleter.Cache, function
>> >> matchSubset()
>> >> at line#1 of this function (directly after the opening { ) add:
>> >> if (s.constructor === Function) return false;
>>
>> >> Regards,
>> >> Bramus!
>

Reply via email to