aeq.forEach does not work with ScriptUI container children array

Issue #28 new
Rune Gangsø created an issue

Example:

var win = aeq.ui.createWindow()
win.addButton()
win.addButton()
win.addButton()
aeq.forEach( win.get().children, function( key, value ) {
    alert( key + value )
})

This only alerts ones, with the text length3.

Caused by bad checking of array type in aeq.forEach

Comments (4)

  1. Former user Account Deleted

    One workflow solution--

    aeq.arrayEx(win.get().children).forEach( function( child ) {
        alert( child.text )
    });
    

    or to solve the specific issue, we can change aeq.forEach array detection from... if ( obj && Object.prototype.toString.call( obj ) === '[object Array]' )

    to

    if ( obj && ( Object.prototype.toString.call( obj ) === '[object Array]' || obj.constructor.name === 'Collection' ) )

    Thoughts @runegan ?

  2. Former user Account Deleted

    Everything I've seen does, but not sure about everything. Issue is that with prototype.toString.call(whatever) some array-ish elements return [object Array] and others include a string of the elements within them (maybe only ESTK's Collections). My suggestion above seemed robust, but better to double-check.

  3. Rune Gangsø reporter

    Ok, as long as we don't get a 'something' does not have a property constructor error we're good.

  4. Log in to comment