7
votes

In QML, I am writing a component like so:

import QtQuick 2.0
import NDDQuickItem 1.0

Item {
  property alias source: ndd.nddContentPath

  function goToSlide(component,slide){
    ndd.goToSlide(component,slide);
  }

  NDDQuickItem {
    width: parent.width
    height: parent.height
    id: ndd
  }
}

I can use property alias to "promote" properties of the NDDQuickItem to the root of the component. However, as shown, I'm currently writing component-global methods that just re-call a method on the NDDQuickItem.

Is there an equivalent to property alias that works for methods? Something like:

method alias goToSlide: ndd.goToSlide // not valid QML

or

goToSlide = ndd.goToSlide             // not valid QML
1

1 Answers

9
votes

Not using alias, but you can property var v : someId.someFoo and then you can object.v().

Note that if someFoo() { console.log(this) }, then in someId.someFoo() this will be someId, while in object.v() this will be object. That will not be a problem when referencing stuff in the function body due to how JS works, nothing like having the wrong this in C++.

You could also use a signal:

signal goToSlide(var component,int slide)
onGoToSlide: ndd.goToSlide(component,slide)

With the added benefit you can "remap" it to something else, from outside the component.

At any rate, both are not really necessary:

I'm currently writing global methods that just re-call a method on the NDDQuickItem.

It is not global, it is a member of the root object, and there is nothing wrong with doing that, it is common practice. I mean if efficiency is a primary concern, you wouldn't be writing QML. Also, know that alias doesn't come for free either, in the case of ints and reals, it takes pretty much the same space as a full fledged property would.