That is odd. I found that when I changed
the type of globalModel from DataProvider to Array the length returned
correctly. Must be some weird casting going on in the VM that’s screwing
things up.
Matt
From:
[email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Tom Jeffery
Sent: Friday, July 22, 2005 10:43
AM
To: [email protected]
Subject: [flexcoders] DataProvider
API doing strange things... very confused!
I wrote some sample code to try to help me figure out how to properly
create and use a global instance of data
throughout my Flex
application. The idea was to create an
actionscript class that
contains a static instance of an Array /
DataProvider, initialize it
on creation of the application, and then bind
multiple components to
it, so they would all update when a modelChanged
event was broadcast.
With debug printouts or using an object inspector,
I'm seeing some
really strange behavior with this sample
application. If I add an
item to the global array, it shows up on the two
lists, but doesn't
actually appear in the array, and the array size
doesn't get any
bigger. If I delete an item, the item gets
deleted from both lists
and the array, but again, the array.length
property remains unchanged.
Am I just missing something simple here about how
to do this? My two
source files and xml data are pasted here if you'd
like to try them
out and see if you can spot what it is that I'm
doing wrong.
Thanks for any assistance!
-Tom Jeffery
--- GlobalModel.as ---
import mx.controls.listclasses.DataProvider;
class GlobalModel {
static var
globalModel:DataProvider;
}
--- data.xml ---
<data>
<item>
<label>Test Item 1</label>
</item>
<item>
<label>Test Item 2</label>
</item>
<item>
<label>Test Item 3</label>
</item>
<item>
<label>Test Item 4</label>
</item>
</data>
--- DataTest.mxml ---
<?xml version="1.0" ?>
<mx:Application xmlns="*"
xmlns:mx="http://www.macromedia.com/2003/mxml"
width="100%"
height="100%"
xmlns:local="*"
creationComplete="doInit();" >
<!--
<local:Inspect/>-->
<mx:Script>
<![CDATA[
import
GlobalModel;
import
mx.controls.listclasses.DataProvider;
function addText():Void {
//testModel.item.addItem(testInput.text);
GlobalModel.globalModel.addItem(testInput.text);
//testList1.addItem(testInput.text);
}
function deleteItem():Void {
if (testList1.selectedIndex == undefined)
return;
GlobalModel.globalModel.removeItemAt(t
estList1.selectedIndex);
}
function doInit():Void {
GlobalModel.globalModel = testModel.item;
}
]]>
</mx:Script>
<mx:Model
id="testModel" source="./data.xml"/>
<mx:VBox>
<mx:HBox>
<mx:List id="testList1" dataProvider="{testModel.item}"
multipleSelection="false" />
<mx:List id="testList2"
dataProvider="{GlobalModel.globalModel}"
selectable="false" />
</mx:HBox>
<mx:HBox>
<mx:TextInput id="testInput" />
<mx:Button id="testButton" click="addText();"
label="Add To Model
{GlobalModel.globalModel.length}" />
<mx:Button click="deleteItem()" label="Delete Selected"/>
</mx:HBox>
</mx:VBox>
</mx:Application>
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
SPONSORED LINKS
YAHOO! GROUPS LINKS
|
- RE: [flexcoders] DataProvider API doing strange things... very... Matt Chotin
-