2009-06-02 5 views
0

In MXML ist es möglich, Objektinstanzen zu erklären, auch für dynamische Objekte, etwa so:Wörterbuchdeklaration in MXML, ist das möglich?

<mx:Object> 
    <mx:foo>bar</mx:foo> 
    <mx:bar>foo</mx:bar> 
</mx:Object> 

Ist es möglich, ohne eine MXML-Wrapper-Klasse das gleiche mit der Dictionary-Klasse zu tun?

Antwort

6

Ich bin mir nicht ganz sicher, ob ich die Frage verstehe, aber wenn Sie fragen, ob Sie ein Wörterbuch in MXML deklarieren können, ja, können Sie; hier ist ein Code, ein Wörterbuch erklärt in MXML, zusammen mit einer Form zeigt, die zeigt, wie Sie Elemente in das Wörterbuch dynamisch hinzufügen könnte:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns:utils="flash.utils.*" creationComplete="onCreationComplete()"> 

    <mx:Script> 
     <![CDATA[ 

      private function onCreationComplete():void 
      { 
       showContents(); 
      } 

      private function onBtnClick():void 
      { 
       addProperty(); 
       showContents(); 
      } 

      private function showContents():void 
      { 
       txt.text = ""; 

       for (var k in d) 
        txt.text += k + ": " + d[k] + "\n" 
      } 

      private function addProperty():void 
      { 
       d[pname.text] = pvalue.text; 

       pname.text = ""; 
       pvalue.text = ""; 

       pname.setFocus(); 
      } 

     ]]> 
    </mx:Script> 

    <mx:VBox> 
     <mx:Label text="Dictionary Contents" /> 
     <mx:TextArea id="txt" width="350" height="200" /> 
     <mx:HBox> 
      <mx:VBox> 
       <mx:Label text="New Property Name" /> 
       <mx:TextInput id="pname" text="pets" /> 
      </mx:VBox> 
      <mx:VBox> 
       <mx:Label text="New Property Value" /> 
       <mx:TextInput id="pvalue" text="dog, cat, fish" /> 
      </mx:VBox> 
     </mx:HBox> 
     <mx:Button id="btn" label="Add" click="onBtnClick()" /> 
    </mx:VBox> 

    <utils:Dictionary id="d"> 
     <utils:fname>Chris</utils:fname> 
     <utils:lname>Nunciato</utils:lname> 
    </utils:Dictionary> 

</mx:Application> 

Hoffnung, das hilft! Wenn ich den Punkt völlig vermisst habe, poste zurück und ich werde sehen, ob ich dir helfen kann.

+0

Danke, es stellte sich heraus, dass dies ein totaler Rookie-Fehler war, bei dem wir einfach nicht realisiert haben, dass das Dictionary nicht im mx-Namespace ist! –

0

Nein, ich glaube nicht, dass das Wörterbuch an MXML gebunden ist.

Brauchen Sie wirklich ein Wörterbuch für das, was Sie erreichen möchten?

1

Es ist möglich, wenn Sie die richtigen Namespace

<mx:Application ... xmlns:utils="flash.utils.*"> 
     <utils:Dictionary> 
      <utils:foo>bar</utils:foo> 
      ... 
     </utils:Dictionary> 
     ... 

Aber ich sehe keinen Grund, dies zu tun zu importieren. Der Vorteil eines Dictionarys gegenüber einem einfachen Objekt (oder < mx: Model>), was Sie normalerweise verwenden würden, ist, dass Sie andere Objekte als String als Schlüssel verwenden können. Aber Sie können keinen Nicht-String-Schlüssel in MXML schreiben.

Mit anderen Worten: ja Sie können einen erstellen, aber es gibt keinen Sinn.

+0

Ich stimme zu, abgesehen von einer Situation. Wir erstellen häufig Mock-Daten mit MXML, weil das Format sich so gut dazu eignet, dies auf effiziente Weise zu tun. Es ist einfach einfacher, Scheinwertobjekte oder andere Arten von Mocks in MXML als AS zu lesen und zu schreiben. Aber ja, ich stimme deiner Meinung sonst zu. –

+0

+1 für es macht keinen Sinn. Diktate sind ideal für Nicht-String-Schlüssel. Ansonsten verwende ein Objekt. –