Just example:
<components>
<component>
<name>...</name>
</component>
<component>
</component>
</components>
class MyArrayOfComponents extends BaseArrayFragment<MyComponent> {
// No params in constructor:
constructor() {
super($$('components component'), MyComponent)
}
getComponentsWithName() {
return this.filter(component => component.hasName())
}
}
class MyComponent extends BaseFragment {
hasName(){
return this.$('.name').isPresent()
}
}
console.log(await new MyArrayOfComponents().getComponentsWithName().count()) // 2, but expected 1
Since filter function uses this.constructor(array, class) - it passes parameters, but they are not used.
Workaround for this is to use default params:
constructor(elems = $$('components component'), clazz = MyComponent) {
super(elems, clazz)
}
Just example:
Since filter function uses this.constructor(array, class) - it passes parameters, but they are not used.
Workaround for this is to use default params: