我有一个来自数据库的学生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>
感谢您的回复。
答案 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())
,那么您自己就会看到这一点。