aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Adams <christopher.adams@nokia.com>2011-12-01 16:07:59 +1000
committerQt by Nokia <qt-info@nokia.com>2011-12-06 02:46:28 +0100
commit8601f3444f7926a7b47ae217d8bf51044ff61809 (patch)
treebb26f7ba247e0f0745266ea897af43dbabd4ff3a
parent2a5bd344ee27bfd61c0e83ce25df5cf843cebdee (diff)
Document function limitation of var properties
Functions cannot be assigned to var properties due to the fact that such an assignment signifies a binding assignment. This limitation needs to be documented. One workaround is to assign an array which contains a function element to a var property, and this commit also adds a unit test to ensure this works. Change-Id: I02363b88233282106ac6d26f14df1988155057b9 Reviewed-by: Martin Jones <martin.jones@nokia.com>
-rw-r--r--doc/src/declarative/basictypes.qdoc9
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.6.qml9
2 files changed, 16 insertions, 2 deletions
diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc
index c128239b53..98eea78a07 100644
--- a/doc/src/declarative/basictypes.qdoc
+++ b/doc/src/declarative/basictypes.qdoc
@@ -434,7 +434,8 @@
\brief A var type is a generic property type.
A var is a generic property type capable of storing any data type.
- It is equivalent to a regular JavaScript variable.
+ It is equivalent to a regular JavaScript variable, except that you
+ cannot assign a JavaScript function to such a property.
For example, var properties can store numbers, strings, objects and
arrays:
@@ -449,11 +450,15 @@
property var aPoint: Qt.point(10, 10)
property var aSize: Qt.size(10, 10)
property var aVector3d: Qt.vector3d(100, 100, 100)
- property var anArray: [1, 2, 3, "four", "five"]
+ property var anArray: [1, 2, 3, "four", "five", (function() { return "six"; })]
property var anObject: { "foo": 10, "bar": 20 }
}
\endqml
+ Attempting to assign a JavaScript function to a var property will result in
+ a binding assignment as per other property types. You can assign a JavaScript
+ array containing a single function element instead.
+
It is important to note that changes in regular properties of JavaScript
objects assigned to a var property will \bold{not} trigger updates of bindings
that access them. The example below will display "The car has 4 wheels" as
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.6.qml b/tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.6.qml
index 5197aeada7..060d24e7bc 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.6.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.6.qml
@@ -5,13 +5,22 @@ Item {
property var items: [1, 2, 3, "four", "five"]
property int bound: items[0]
+ property var funcs: [(function() { return 6; })]
+ property int bound2: funcs[0]()
+
+ function returnTwenty() {
+ return 20;
+ }
Component.onCompleted: {
if (bound != 1) return false;
+ if (bound2 != 6) return false;
items = [10, 2, 3, "four", "five"] // bound should now be 10
+ funcs = [returnTwenty] // bound2 should now be 20
if (bound != 10) return false;
+ if (bound2 != 20) return false;
test = true;
}