Another way to implement this is to do it in a separate javascript file. There you can use all the javascript you need, and not the "almost javascript" of QML.
I find myself using those whenever I do real programming in javascript. The inline JS in QML is fine for short things, but for real work, I use those. And remember to use ".pragma library" so it's the same scope for all QML files. Bo. Den 27-01-2012 00:45, christopher.ad...@nokia.com skrev: > Hi Harri, > >> Hi, >> >> Perhaps like most javascript coders, I'm mainly educated by experimenting >> with it. >> >> I have a pretty strong Python background though, and most of the time I can >> carry over some usage patterns just guessing how it probably works in js/qml >> side. >> >> Now I was surprised though, and I wonder if the following behaviour is a bug, >> or what is going on. >> >> I have some code, roughly like >> >> A.qml: >> Item { >> property variant cb // callback >> >> signal close() >> >> onClosed: cb() >> >> function popup(callback) { >> cb = callback // callback() is called in this assignment!? >> } >> >> ... >> } >> >> >> then some >> B.qml: >> >> Item { >> A { id: hello } >> >> function continueHere() { >> print "should continue here" >> } >> >> function setup() { >> hello.popup(continueHere) >> } >> } >> >> >> My problem is that callback is called at assignment time (see comment in >> code). >> Is it an artifact of cb being a variant property and I should not be doing >> this? >> > > There are a couple of reasons why this doesn't work for your code: > Firstly, the property is a variant property (which internally is a QVariant > and so cannot store a JavaScript function value). > Secondly, (and the real reason), we've currently defined the semantic that > assigning a function to a property causes a binding assignment. A binding > assignment causes the bound expression to be evaluated, and all of the > properties involved in the expression to be "captured" (which means we > automatically re-evaluated the expression if any of those properties change). > > In short, the behavior you are seeing is expected. > > However, for QtQuick2.0, we are looking at ways to allow a function value to > be saved to a "var" property (or perhaps to a new property type). We are > currently considering several options: > > 1) adding a new property type: "property function someProp" to which js > function values can be assigned > 2) adding a new function to the Qt global object: > Qt.assignableFunction("expr") -- if the result is assigned to a var property, > it is NOT considered a binding assignment > 3) changing the semantic so that a function assignment is NOT considered to > be a binding assignment, and instead adding a new function to the Qt global > object: Qt.binding("expr") -- if the result is assigned to any property, it > is evaluated as a binding assignment. > > Note that we do need some way to define binding assignments (eg for initial > property values in dynamic object instantiation (loader, component), and for > generating bindings in imperative js code), but as you point out, there are > some good use-cases for being able to assign a js function value to a var > property. > > The current workaround is to store a js array with a single element (the > function value) to a var property. But obviously that's not a desirable > situation. > > Cheers, > Chris. > >> >> Thanks, >> >> Harri >> >> >> >> _______________________________________________ >> Qt-qml mailing list >> Qt-qml@qt.nokia.com >> http://lists.qt.nokia.com/mailman/listinfo/qt-qml > _______________________________________________ > Qt-qml mailing list > Qt-qml@qt.nokia.com > http://lists.qt.nokia.com/mailman/listinfo/qt-qml Bo Thorsen, Fionia Software. -- Expert Qt and C++ developer for hire Contact me if you need expert Qt help http://www.fioniasoftware.dk _______________________________________________ Qt-qml mailing list Qt-qml@qt.nokia.com http://lists.qt.nokia.com/mailman/listinfo/qt-qml