当在DataGrid中更新XMLListCollection时,我希望它将XML(绑定它)添加到Model中。我该怎么做?或者,如果不可能,我将如何手动将XML添加到模型中?
这是我正在尝试做的一个粗略的例子。将数据添加到DataGrid工作正常;它只是在发送到HTTPService时没有进入模型。
<mx:Model id="model">
<root><colors>{collection}</colors></root>
</mx:Model>
<mx:XMLListCollection id="collection" />
<mx:Label text="Input color:" />
<mx:TextInput id="color" />
<mx:Button label="Add Color" click="addColor();" />
<mx:DataGrid dataProvider="{collection}">
<mx:columns>
<mx:DataGridColumn dataField="color" headerText="Color" />
</mx:columns>
</mx:DataGrid>
<mx:Button label="Submit" click="submit();" />
<mx:Script><![CDATA[
// imports...
public function addColor():void {
var xml:XML = new XML(<color></color>);
xml.color = color.text;
collection.addItem(xml);
Alert.show(collection.toXMLString()); // xml looks fine and shows up in datagrid
// how to do something like this?
// model.appendChild(xml); // doesn't work
}
public function submit():void {
var serv:HTTPService = new HTTPService();
// setup serv...
serv.send(model); // server just gets "<colors></colors>"
}
]]></mx:Script>
谢谢!
谢谢你的回答!它最终导致了我的解决方案。我不得不使用XMLListCollection,因为向DataGrid添加2个或更多元素因为任何原因从未使用XML或XMLList(我尝试{variable},{variable.colors},{variable.colors.color},{variable.color所有可能性)。我认为我可以使用Model,但我将其更改为下面的XML,以便您可以使用toXMLString()查看输出。最后,我必须使用模型或XML,因为这只是大项目的一个小例子(我通过在下面添加OtherData来展示这一点)。再次感谢。这是一个有效的例子:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:XML id="data">
<colors>
</colors>
</mx:XML>
<mx:XMLListCollection id="collection" source="{data.color}" />
<mx:XML id="model">
<root>
<otherData>{otherData.text}</otherData>
<colors>{data}</colors>
</root>
</mx:XML>
<mx:Label text="Input color:" />
<mx:TextInput id="color" />
<mx:Button label="Add Color" click="addColor();" />
<mx:DataGrid dataProvider="{collection}">
<mx:columns>
<mx:DataGridColumn dataField="color" headerText="Color" />
</mx:columns>
</mx:DataGrid>
<mx:Label text="Other data:" />
<mx:TextInput id="otherData" />
<mx:Button label="Submit" click="submit();" />
<mx:Script><![CDATA[
import mx.controls.*;
public function addColor():void {
var xml:XML = new XML(<color></color>);
xml.color = color.text;
collection.addItem(xml);
Alert.show(collection.toXMLString()); // xml looks fine and shows up in datagrid
}
public function submit():void {
Alert.show(model.toXMLString());
}
]]></mx:Script>
</mx:Application>
答案 0 :(得分:0)
以下是您的一些误解:
<root><colors>{collection}</colors></root>
您可能希望将collection
绑定到<colors/>
节点的子节点,而它所做的是E4X字符串替换,因此此处不会创建绑定。
var xml:XML = new XML(<color><value></value></color>);
应该是:
var xml:XML = <color><value/></color>;
XML在AS3中有特殊的文字语法,你用来创建新XML的东西已经是XML了,所以基本上你做了两次。没有文本值的节点被标准化为更短,因此您尝试以您的方式编写它们将无效。
XMLListCollection
实际上是一个无用的类,不知道为什么它甚至存在。您可以指定XML
或XMLList
作为DataGrid
的数据提供者。 Model
是另一个无用的类,所以,可能你可以松开它并用dataGrid.dataProvider
替换它,你需要引用DataGrid的内容。