actionscript switch语句在flex中不起作用

时间:2010-03-05 21:03:14

标签: flex flash actionscript

我有一个来自数据库的学生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 个答案:

答案 0 :(得分:1)

switch (element.student_state.toString()) {...

您需要xml元素的值,而不是用于比较的元素本身。

答案 1 :(得分:1)

你有几个错误堆叠在一起 - 我相信你最近的错误 - 多个名字的引用错误 - 与你的代码中引用了多个具有相同名称(TextInput)的类有关。可能是flex正在你班级的头部自动添加一个import语句。

答案 2 :(得分:0)

好的我觉得我现在看到了问题,

for each (var element:XML in students)

只会循环一次,因为整个学生的XML都在学生中,没有student_state属性,你可能意味着

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

然后你在学生节点上循环,该节点确实有孩子student_state。所以这应该工作,即使没有toString()方法(在那一点上不确定,所以你可能想要两种方式尝试)。

熟悉trace(),您可以使用它将信息输出到控制台。如果您在for循环中添加了trace(element.toXMLString()),那么您自己就会看到这一点。