2009-06-02 2 views
0

В MXML это можно объявить экземпляры объектов, даже для динамических объектов, например, так:Объявление словаря в MXML, возможно ли это?

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

Можно ли сделать то же самое с Dictionary класса без использования какого-либо класса MXML обертки?

ответ

6

Я не совсем уверен, что я понимаю вопрос, но если вы спрашиваете, можете ли вы объявить словарь в MXML, да, вы можете; Вот код демонстрирует словарь, объявленный в MXML, наряду с формой, показывая, как можно добавлять элементы в словарь динамически:

<?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> 

Надежда, что помогает! Если я полностью пропустил этот вопрос, отправьте сообщение, и я посмотрю, смогу ли я помочь.

+0

Спасибо, оказывается, это была полная ошибка новобранец, когда мы просто не понимали, что Словарь не находится в пространстве имен mx! –

0

Нет, я не думаю, что Словарь связан с MXML.

Вам действительно нужен словарь для чего вы хотите достичь?

1

Это возможно, если импортировать правой Namespace

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

Но я не вижу никаких оснований, чтобы сделать это. Преимущество словаря над простым объектом (или < mx: Model>), что вы обычно использовали, заключается в том, что вы можете использовать объекты, отличные от String, как ключевые. Но вы не можете написать нестроковый ключ в MXML.

Другими словами: да, вы можете создать его, но нет смысла.

+0

Согласен, кроме одной ситуации. Мы часто создаем mock-данные с использованием MXML, потому что формат позволяет сделать это эффективно. В MXML намного проще читать и записывать объекты mock value или другие типы mocks, чем AS. Но да, я согласен с твоим чувством иначе. –

+0

+1 за это не имеет смысла. Dict отлично подходят для нестрочных ключей. В противном случае используйте объект. –

Смежные вопросы