On 26/10/2010, at 6:04 AM, ext Bart Kelsey wrote:

> Greets!
> 
> I'm trying to create a list of Items, and it's not clear to me, from within 
> JavaScript, how to add, remove, and count those items.  The function below 
> doesn't seem to work (textArray is declared as "property list<Item> 
> textArray").  Note that my startUp function is being correctly called, and I 
> can verify that the TalkBoxTextComponent.createObject method is working.  
> I've tried using .push(), .append(), length, etc, and I'm having no luck so 
> far.
> 
> ******
> 
> var TalkBoxTextComponent;
> 
> function startUp() {
>   TalkBoxTextComponent = Qt.createComponent("TalkBoxText.qml");
> }
> 
> function appendText(string) {
>   var object = TalkBoxTextComponent.createObject(talkbox);
>   object.text = string;
>   talkbox.textArray[0] = object;
>   talkbox.textArray[1] = object;
> }

Manipulating QML list properties from javascript is not well documented at the 
moment (http://bugreports.qt.nokia.com/browse/QTBUG-14645), and as they behave 
differently from javascript Arrays, it can sometimes get a bit confusing.

The best way I know how to explain the current list property support is to say 
that writing to a list _property_ is supported, but writing to the list itself 
is not. To give examples:

(1) textArray = [object, object]    //supported, writes a new array of two 
items to the property textArray
(2) textArray = []    //supported, writes an empty array to the property 
textArray (i.e. clears the textArray property)

(3) textArray[1] = object    //not supported, tries to modify the list itself
(4) textArray.push(object)    //not supported, tries to modify the list itself

There are challenges with supporting (3) and (4) and having bindings involving 
textArray update correctly, which is why they are not yet supported. It's a 
limitation we don't like, and want to fix in a future release (probably by 
having lists support some form change notifications, much like list models do). 
The workaround for now, if you need a writable list, is to use a javascript 
Array (the samegame demo shows an example of this).

Regards,
Michael
_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to