• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-04-2008, 18:04   #1 (permalink)
Markus Raab
 
Benutzerbild von derRaab
 
Registriert seit: Aug 2001
Ort: Berlin Friedrichshain
Beiträge: 924
unable to bind to property

Hallo Leute,

ich versuche mich auch an meiner ersten MXML-Applikation. Die läuft auch so wie ich mir das vergestellt habe, allerdings gibt mir Flex immer die Warnung aus:

Code:
warning: unable to bind to property 'item' on class 'XML' (class is not an IEventDispatcher)
Es geht um eine banale Glossar-Anzeige, die auf einer einfach XML-Struktur basiert.

Ein XML (glossary.xml) definiert alle Begriffe und die URL zu einer weiteren XML-Datei, in der dann auch die Begriffserklärung liegt.

glossary.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<glossary url="glossaryitems">
  <item url="g0.xml"><![CDATA[Begriff 1]]></item>
  <item url="g1.xml"><![CDATA[Begriff 2]]></item>
</glossary>
glossaryitem.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<glossaryitem>
  <item><![CDATA[Begriff 1]]></item>
  <explanation><![CDATA[<p>Begriffserklärung 1</p>]]></explanation>
</glossaryitem>
Und hier die Applikation:

Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="glossaryRequest.send()">

	<mx:Script>
		<![CDATA[
			
			function listChange( event: Event ): void
			{
				itemRequest.url = "glossary/glossaryitems/" + list.selectedItem.@url;
				itemRequest.send();
			}
			
		]]>
	</mx:Script>

	<mx:HTTPService id="glossaryRequest" url="glossary/glossary.xml" resultFormat="e4x"/>
	<mx:HTTPService id="itemRequest" resultFormat="e4x"/>
	
	<mx:HBox x="0" y="0" width="1010" height="70">
		<mx:Image source="@Embed('assets/TopBar_ger_1010x70_clear.jpg')" scaleContent="false" id="topBarImage"/>
	</mx:HBox>
	<mx:HDividedBox top="80" bottom="10" width="990" x="10">
		<mx:List id="list" width="323" height="715" dataProvider="{glossaryRequest.lastResult.item}" change="listChange(event)"></mx:List>
		<mx:Text id="text" htmlText="{itemRequest.lastResult.explanation}"/>
	</mx:HDividedBox>
</mx:Application>
Alles funktioniert wie erwartet, nur wird mir diese Fehlermeldung eben ausgegeben. Also wo liegt denn dann mein Fehler? An lastRequest kann ich "binden" ohne Warnung.
derRaab ist offline   Mit Zitat antworten
Alt 09-04-2008, 18:14   #2 (permalink)
wolter.biz
 
Benutzerbild von wolter
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 3.391
Normale XML-Elemente sind nicht Bindable. Du kannst aber ein anderes resultFormat wählen (z. B. Object). Oder transformiere Deine XML-Strukturn zu eigenen bindbaren Wertobjekten (VOs).

Viel Erfolg,

Sascha.
wolter ist offline   Mit Zitat antworten
Alt 09-04-2008, 19:49   #3 (permalink)
Markus Raab
 
Benutzerbild von derRaab
 
Registriert seit: Aug 2001
Ort: Berlin Friedrichshain
Beiträge: 924
Aha. So ganz kapiert hab ich das noch nicht. Wenn ich einfach statt "e4x" "object" angebe, dann werden mir die Daten nicht mehr ausgegeben. ?

Ich wollte halt zum Test einfach mal so viel wie möglich mit den Möglichkeiten innerhalb von MXML machen.

Und irgendwie funktioniert das Binding ja trotzdem, weil ja der "dataProvider" der "List" schon aktualisiert wird.

Ist diese Warnung eher nur als Hinweis zu verstehen um den ich mich im Prinzip nicht kümmern muss?
derRaab ist offline   Mit Zitat antworten
Alt 09-04-2008, 19:52   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Naja, es hängt davon ab, was du machen willst. Wenn sich die Daten nicht ändern, ist es egal. Du kannst aber auch die Warnung umgehen, indem du das XML Objekt in eine XMLListCollection steckst.
Omega Psi ist offline   Mit Zitat antworten
Alt 09-04-2008, 20:00   #5 (permalink)
Markus Raab
 
Benutzerbild von derRaab
 
Registriert seit: Aug 2001
Ort: Berlin Friedrichshain
Beiträge: 924
Kann ich das innerhalb des MXML-Attributes machen?
derRaab ist offline   Mit Zitat antworten
Alt 09-04-2008, 20:13   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Sorry, hatte mich versehen. Aber du kannst sowas machen:
ActionScript:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
  3.     <mx:XMLListCollection>
  4.         <mx:XMLList>
  5.             <root>
  6.                 <node />
  7.             </root>
  8.         </mx:XMLList>
  9.     </mx:XMLListCollection> 
  10. </mx:Application>
Omega Psi ist offline   Mit Zitat antworten
Alt 09-04-2008, 20:14   #7 (permalink)
Markus Raab
 
Benutzerbild von derRaab
 
Registriert seit: Aug 2001
Ort: Berlin Friedrichshain
Beiträge: 924
Ok, aber das hat ja nix mit meinem Beispiel zu tun. Oder
derRaab ist offline   Mit Zitat antworten
Alt 09-04-2008, 20:20   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Ne, ich fürchte nicht... ich brauch einen Kaffee. Sorry...
Omega Psi ist offline   Mit Zitat antworten
Alt 09-04-2008, 20:25   #9 (permalink)
Markus Raab
 
Benutzerbild von derRaab
 
Registriert seit: Aug 2001
Ort: Berlin Friedrichshain
Beiträge: 924
Kein Problem Aber danke! Ich wurschtel mich da schon durch.
derRaab ist offline   Mit Zitat antworten
Alt 21-04-2008, 09:46   #10 (permalink)
Neuer User
 
Registriert seit: Apr 2008
Beiträge: 6
Question

Guten Morgen,

erstmal ein herzliches Hallo, das hier ist mein erstes Posting in diesem Forum!

Ich hänge mich hier mal an, da ich das gleiche Problem habe. Kannst du vielleicht etwas zur Lösung sagen? Bei mir sieht es konkret so aus:
Ich habe eine Tilelist, die folgenden Renderer verwendet:

Code:
<?xml version="1.0" encoding="utf-8"?> 
<!-- http://blog.flexexamples.com/2008/03/08/creating-a-simple-image-gallery-with-the-flex-tilelist-control/ --> 
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" verticalAlign="middle"> 
<mx:Image source="{data.@thumbnailImage}" /> 
<mx:Label text="{data.@title}" /> 
</mx:VBox>
Die Daten kommen aus einem XML File, und das klappt auch alles soweit. Das einzige Problem ist, dass ich immer die folgende Meldung bekomme:

Code:
warning: unable to bind to property 'title' on class 'XML' (class is not an IEventDispatcher) 
warning: unable to bind to property 'thumbnailImage' on class 'XML' (class is not an IEventDispatcher)
Wenn ich die Tilelist scrolle, wiederholt sich dieser Fehler.

Ich weiß, dass ich wohl eine XMLListCollection nutzen muss. Das tue ich jedoch:

Code:
public var GREIFER_1:XML = 
<image 
        title="VX220 Turbo"
  	company="Feine Greifer" 
	thumbnailImage="images/greifer/1_tn.gif"
	source="images/greifer/1.gif" />;

[...]


public var _xmlGreiferSource:XMLList = 	GREIFER_1 + GREIFER_2 + GREIFER_3 + GREIFER_4;

[Bindable]
public var _xmlGreifer:XMLListCollection = new XMLListCollection(_xmlGreiferSource);

Hat jemand eine Idee? Bin für jeden Hinweis dankbar!

Vielen Dank,

PsychoD

Geändert von PsychoD (21-04-2008 um 09:48 Uhr)
PsychoD ist offline   Mit Zitat antworten
Alt 21-04-2008, 10:05   #11 (permalink)
Trennschleifer
 
Benutzerbild von bobo_k1
 
Registriert seit: Apr 2004
Ort: Hamburg
Beiträge: 1.282
ganz einfache lösung - verwende einfach einen ObjectProxy - der ist Bindable

PHP-Code:
import mx.utils.ObjectProxy;
[
Bindable]
                private var 
dataProxy:ObjectProxy;

                private function 
init():void
                    
{
                        


                        
dataProxy = new ObjectProxy();
                        
dataProxy.label data.label;

                        
                        
                        
                    }

    <
mx:Label fontSize="9" color="0x4f4f4f" y="131" text="{dataProxy.label}" width="112" /> 
und schon sind alle data-Props Bindable
__________________
Es gibt nur zwei Arten von Menschen die Hawaiihemden tragen: Schwuchteln und dicke fette Partylöwen. Und du siehst nicht aus wie ein dicker fetter Partylöwe!" - Homer J. Simpson
bobo_k1 ist offline   Mit Zitat antworten
Alt 21-04-2008, 10:09   #12 (permalink)
Neuer User
 
Registriert seit: Apr 2008
Beiträge: 6
Wow vielen Dank, das ging ja schnell. Ich probiere es aus sobald ich Zeit finde und melde mich zurück.
PsychoD ist offline   Mit Zitat antworten
Alt 21-04-2008, 11:51   #13 (permalink)
Neuer User
 
Registriert seit: Apr 2008
Beiträge: 6
Ich habs probiert, leider ändert es nichts. Das Problem scheint also nicht im Renderer zu beheben zu sein. Ich werd mal versuchen die XML Quelldaten irgendwie durch den ObjectProxy zu jagen...
PsychoD ist offline   Mit Zitat antworten
Alt 21-04-2008, 12:52   #14 (permalink)
Neuer User
 
Registriert seit: Apr 2008
Beiträge: 6
Smile Habs!

AAAAAAHHH! Die Lösung ist manchmal soo einfach.

Ich habs gelöst. Kein ObjectProxy, kein gar nichts. XML ist wohl direkt bindable. Daher:

Aus z.B.

<mx:Label text="{data.@title}" />

mach

<mx:Label text="{XML(data).@title}" />

und die Warnings sind verschwunden.

Danke für den Tipp trotzdem
PsychoD ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele