Hi Alex
Sorry to get back so late, we had release for couple of days, With you
suggestion I made it working which means it is filtering but now it is
showing the complete XML list , Is there any way I can only show the
attribute with the friendly-name.Like suggested, i put everything in
XMListCollection instead of ArrayCollection which makes it enabel to loop
throught the whoel list but that fixing raises the display issue.I am doing
something wrong here which screwed labelfunction assignfriendlyname for the
list.Please let me know how would we fix that. Many Many thanks for your
help.
Anuj

/*Revised Code*/
//XML File
<devices>
<device id="uuid:

ac14231535625133346546">
<attributes>
<attribute name="Flex"/>
<attribute name="monitor">monitoring</attribute>
<attribute name="version">2.0</attribute>
<attribute name="location">location</attribute>
<attribute name="friendly-name">Camera1</attribute>
<attribute name="type">AIR</attribute>
</attributes>
<schedules/>
</device>
</devices>
/**********************CODE*********************/
//This is REST CALL
<mx:HTTPService id="devicesXML" method="GET" resultFormat="e4x"
result="devicesXMLHandler(event)" showBusyCursor="true">
</mx:HTTPService>
//THis makes call to server
devicesXML.url="http://"+IP+"/config/devices";;

[Bindable]
            private var filteredDevices:XMLListCollection;
//Thid function is called when values are retreived
private function devicesXMLHandler(event:ResultEvent):void
{
devicesList = event.result.device;

//Changed

filteredDevices=new XMLListCollection(devicesList);

//Checks every device
for each (var devicesInPool:* in devicesList) {
var deviceName:String = devicesinpo...@id;
//var label:string=devicesinpo...@id;
devicesInList.push(deviceName);


    nvrsInPoolList.dataProvider = filteredDevices;
                filteredDevices.filterFunction=processFilter
}

//This function calls for assigning label for the entries in the List
box named nvsInPoolList

private function assignFriendlyName(item:Object):String
{
//Checks every device
for each (var devicesID:* in devicesList) {
var deviceName:String = devices...@id;
//Checks if the current deviceID matches the current item, if so
it will search its attributes
if(deviceName == item.toString()) {
var devicesText:XMLList =
devicesID.child("attributes").child("attribute");
//Checks every attribute tag for each device
for each (var attributesFriendlyName:* in devicesText) {
//Checks if the attribute name is friendly-name
if(attributesfriendlyna...@name == 'friendly-name') {
var friendlynameText:String = attributesFriendlyName.toString();
return friendlynameText;
}
}

}
}
return item.toString();
}
//Filtering Data in the Device List

private function processFilter(item:Object):Boolean
{
return
String(item).toUpperCase().indexOf(filterText.toUpperCase()) >= 0;
}
//Tracking the typed Camera Name
private function doChange():void
{
if(txtSearch.text!=null)
{
this.filterText=txtSearch.text;
this.filteredDevices.refresh();
}
}

<mx:List id="nvrsInPoolList" allowMultipleSelection="true"
dragMoveEnabled="true" dragEnabled="true" dropEnabled="true"
labelFunction="assignFriendlyName"
y="105" x="17" height="462" width="294"/>

<mx:TextInput id="txtSearch" x="17" y="75" change="doChange()"/>


On Tue, Dec 9, 2008 at 8:28 PM, Alex Harui <aha...@adobe.com> wrote:

>    I'd try using XMLListCollection instead of ArrayCollection
>
>
>
> *From:* flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] *On
> Behalf Of *anuj sharma
> *Sent:* Tuesday, December 09, 2008 5:05 PM
> *To:* flexcoders@yahoogroups.com
> *Subject:* Re: [flexcoders] Filtering the List Entries depending upon the
> text entered in text Input box
>
>
>
> Sorry Guys
> I posted another mail in the group. I thought it was working but it is not
> going through each node, it is just comparing with the id of the first node
> of my XML , Below is the code , I apologize for jumping to the conclusion
> that it is working as initially it seems like. I am doing somethign wrong
> which makes my code not to loop through each and every node but just
> matching it with the id of the first node of my XML,
> Please help me guys to resolve this problem
>
> //XML File
> <devices>
> <device id="uuid:
>
> ac14231535625133346546">
> <attributes>
> <attribute name="Flex"/>
> <attribute name="monitor">monitoring</attribute>
> <attribute name="version">2.0</attribute>
> <attribute name="location">location</attribute>
> <attribute name="friendly-name">Camera1</attribute>
> <attribute name="type">AIR</attribute>
> </attributes>
> <schedules/>
> </device>
> </devices>
> /**********************CODE*********************/
> //This is REST CALL
> <mx:HTTPService id="devicesXML" method="GET" resultFormat="e4x"
> result="devicesXMLHandler(event)" showBusyCursor="true">
> </mx:HTTPService>
> //THis makes call to server
> devicesXML.url="http://"+IP+"/config/devices";;
> //Thid function is called when values are retreived
> private function devicesXMLHandler(event:ResultEvent):void
> {
> devicesList = event.result.device;
>
> //Checks every device
> for each (var devicesInPool:* in devicesList) {
> var deviceName:String = devicesinpo...@id;
> //var label:string=devicesinpo...@id;
> devicesInList.push(deviceName);
> filteredDevices=new ArrayCollection(devicesInList);
>
> nvrsInPoolList.dataProvider = filteredDevices;
> filteredDevices.filterFunction=processFilter;
> }
>
> //This function calls for assigning label for the entries in the List
> box named nvsInPoolList
>
> private function assignFriendlyName(item:Object):String
> {
> //Checks every device
> for each (var devicesID:* in devicesList) {
> var deviceName:String = devices...@id;
> //Checks if the current deviceID matches the current item, if so
> it will search its attributes
> if(deviceName == item.toString()) {
> var devicesText:XMLList =
> devicesID.child("attributes").child("attribute");
> //Checks every attribute tag for each device
> for each (var attributesFriendlyName:* in devicesText) {
> //Checks if the attribute name is friendly-name
> if(attributesfriendlyna...@name == 'friendly-name') {
> var friendlynameText:String = attributesFriendlyName.toString();
> return friendlynameText;
> }
> }
>
> }
> }
> return item.toString();
> }
> //Filtering Data in the Device List
> private function processFilter(item:Object):Boolean
> {
> return
> String(item).toUpperCase().indexOf(filterText.toUpperCase()) >= 0;
> }
> //Tracking the typed Camera Name
> private function doChange():void
> {
> if(txtSearch.text!=null)
> {
> this.filterText=txtSearch.text;
> this.filteredDevices.refresh();
> }
> }
>
> <mx:List id="nvrsInPoolList" allowMultipleSelection="true"
> dragMoveEnabled="true" dragEnabled="true" dropEnabled="true"
> y="105" x="17" height="462" width="294"/>
>
> <mx:TextInput id="txtSearch" x="17" y="75" change="doChange()"/>
>
>
>
> On Wed, Dec 3, 2008 at 5:31 PM, anuj181 <anuj...@gmail.com> wrote:
>
> Hi All
> This is somehow regarding the question I have asked few weeks back.
> Unfortunately I have to stop this task at that time and now need to
> work on that. My need is that I have some entries in the List as an
> arrayCollection and there is text input box and I like to have list to
> filter the data as soon as user starts typing text. I have attached
> the so far developed code. I need as soon as user types On, the list
> below should only show first entry which is 'One-Device'. I attached
> the code but it is not working as I want. This is going to be just my
> dummy working prototype and once this module has been made working
> then i am going to merge this module into my Main Project.
>
> Also if anyone has any better idea about how to figure this thing out
> that will be great and instead of arrayColection if we can achieve the
> same function laity that would be helpful too.
> Thanks a lot
> Anuj
>
> /******************CODE****************************/
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> layout="absolute"
> initialize="init()"
> width="100%" height="100%"
> horizontalScrollPolicy="off">
>
> <mx:Script>
> <![CDATA[
>
> import mx.managers.PopUpManager;
> import mx.effects.DefaultTileListEffect;
> import mx.rpc.events.ResultEvent;
> import mx.controls.Alert;
> import mx.collections.ArrayCollection;
> import mx.effects.easing.Elastic;
>
> [Bindable]
> public var ac:ArrayCollection = new
>
> ArrayCollection(["One-Device","Two-Device","Three-Device","Four-Device","Five-Device","Six-Device"]);
>
> [Bindable]
>
> public var filterText:String = '';
>
> private function doChange():void
> {
> this.filterText = txtSearch.text;
> this.ac.refresh();
> }
>
> private function init():void
> {
>
> ac.filterFunction = processFilter;
> }
> private function processFilter(item:Object):Boolean
> {
> var result:Boolean=false;
> if(!DevicesList.labelField.length ||
>
> DevicesList.labelField.toUpperCase().indexOf(this.filterText.toUpperCase())>=0)
> result=true;
>
> return result;
> }
>
> private function seeLabel(evt:Event):void
> {
> var alrt:Alert=Alert.show(evt.currentTarget.toString());
> }
>
> ]]>
> </mx:Script>
>
> <mx:List x="74" y="228" width="229" height="238" dataProvider="{ac}"
>
>
> id="DevicesList"></mx:List>
> <mx:TextInput x="74" y="198" id="txtSearch" change="doChange()"/>
>
>  </mx:Application>
>
>
>
>   
>

Reply via email to