инструкция переключателя Actionscript не работает в flex - PullRequest
1 голос
/ 06 марта 2010

У меня есть студенты XML из базы данных. Столбец student_state может иметь значение «пройдено» среди других значений (отсюда и необходимость в выражении switch). Когда вызывается функция list_changeHandler, в зависимости от значения student_state, я хочу, чтобы форма отображала различные поля. Поэтому я попытался динамически создать форму в ActionScript, но она не отображается при запуске приложения flex:

import mx.containers.Form;
import mx.containers.FormItem;
import mx.containers.HBox;
import mx.controls.Button;
import mx.controls.ComboBox;
import mx.controls.TextArea;
import mx.controls.TextInput;



[Bindable] 
public var students:XML;
private const CONTEXT_URL:String = "http://localhost:3000";

protected function textInput_enterHandler():void
{
    currentState='List';
}

protected function list_changeHandler():void
{
    currentState='Detail';

    for each (var element:XML in students)
    {

        switch (element.student_state)  {

        case "passed":

            setPass("passing_number_id", "created_at");

        break;
        }


    }



}

function setPass(label:String, contents:String):void
{

    var form:Form;
    var formItem:FormItem;
    var textInput:TextInput;

    var form = new Form();
    var formItem = new FormItem(); 
    var textInput = new TextInput();
    form.addChild(formItem)
    formItem.addChild(textInput)
    addChild(form)  
    // form.includedIn = "Detail"
    form.x = -12
    form.y = 150
    form.id = "detailView"
    form.label = label;
    formItem.label = label;
    textInput.id = label + "TextInput";
    textInput.text = "@{studentsGrid.selectedItem.label}";  



}

Вот XML:

<students>
<student>
<student_state>passed</student_state>
<created_at>2010-02-19T17:44:34Z</created_at>
<passing_number_id>4</passing_number_id>
<site_id>1</site_id>
</student>
</students>

Спасибо за любой ответ.

Ответы [ 3 ]

1 голос
/ 06 марта 2010

У вас было несколько ошибок, наложенных друг на друга - я полагаю, что ваша самая последняя ошибка - ошибка ссылки с несколькими именами - связана с несколькими классами с одинаковыми именами (TextInput), на которые ссылается ваш код.Возможно, что flex добавляет оператор импорта к одному автоматически во главе вашего класса.

1 голос
/ 06 марта 2010
switch (element.student_state.toString()) {...

Для сравнения вам нужно значение элемента xml, а не сам элемент.

0 голосов
/ 06 марта 2010

Хорошо, я думаю, что вижу проблему сейчас,

for each (var element:XML in students)

будет зацикливаться только один раз, потому что весь XML студентов находится в студентах, у которых нет свойства student_state, вы, вероятно, имеете в виду

for each (var element:XML in students.children())

тогда вы зацикливаетесь на студенческом узле, у которого действительно есть child student_state. Так что это должно работать, даже без метода toString () (не уверен в этом, так что вы можете попробовать оба варианта).

Ознакомьтесь с функцией trace (), которую вы можете использовать для вывода информации на консоль. если бы вы добавили trace(element.toXMLString()) в свой цикл for, вы бы видели это сами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...