English 中文(简体)
Flex: 通过CFC保存可编辑的数据表格
原标题:
  • 时间:2009-03-12 19:13:42
  •  标签:

我有一个可编辑的数据网格,需要通过ColdFusion中的CFC将其与其他表单字段一起保存。

基本上目标是,通过RO检索到一些位置,这些位置组成第一列,其余列是数据类型,即人口统计数据、客户备注、预约等等,想法是用户在网格中勾选每个复选框,以指示他们是否愿意与这些位置分享数据类型。必须这样做,因为位置可能会改变,因此随着时间的推移可能会有两个、四个或更多。

代码目前运行得很好,但保存部分让我疯狂了!!请帮忙。

Thanks in advance :) the code (abreviated for reasons of sanity) is below:

public function handleconsentResult(event:ResultEvent):void {
            consentDatagrid.dataProvider = event.result;
            }
<mx:RemoteObject id="consentQuery"
    destination="ColdFusion"
    source="Build3.consent"
    showBusyCursor="true">
    <mx:method name="getconsent" result="handleconsentResult(event)" fault="fault(event)" />

<mx:DataGrid id="consentDatagrid" creationComplete="init()" width="98%" wordWrap="true" textAlign="center">
                        <mx:columns>
                            <mx:DataGridColumn headerText="Organisation" width="100" textAlign="left" id="Location" dataField="LocationName" wordWrap="true"/>
                            <mx:DataGridColumn headerText="Demographics"  width="100" wordWrap="true" textAlign="center" itemRenderer="mx.controls.CheckBox" rendererIsEditor="true" editorDataField="ClientDemographics" />
                            <mx:DataGridColumn headerText="Appointments"  width="100" wordWrap="true" textAlign="center" itemRenderer="mx.controls.CheckBox" rendererIsEditor="true" editorDataField="ClientAppointments"/>
                            <mx:DataGridColumn headerText="Activity"  width="70" wordWrap="true" textAlign="center" itemRenderer="mx.controls.CheckBox" rendererIsEditor="true" editorDataField="ClientActivity"/>
                            <mx:DataGridColumn headerText="Notes" width="50" wordWrap="true" textAlign="center" itemRenderer="mx.controls.CheckBox" rendererIsEditor="true" editorDataField="ClientNotes"/>
                        </mx:columns>
                    </mx:DataGrid>
问题回答

听起来你想做的是将DataGrid的全部内容作为表单数据的一部分返回。我还在学习Flex,但我相信由于您使用了AMF,它会自动从ArrayCollection转换为Query。

由于您未使用dataProvider属性来为您的DataGrid获取数据,我假设您是在creationComplete事件中调用的init函数中将ArrayCollection对象绑定到DataGrid上。如果是这样,那么在将表单数据返回给服务器之前,您需要进行相反的操作:将DataGrid值复制回要返回的变量中。

或者,您可以使用可绑定的ArrayCollection变量,这样当用户更新DataGrid时,ArrayCollection变量已经更新,您可以简单地将其返回给ColdFusion。

我不知道CF中的Flex,但是您确定是否想要一次性保存它们还是在某种“保存”或“提交”动作上保存它们吗?

如果您打算一次性保存所有内容,那么这篇关于在Flex中迭代ColdFusion查询的帖子可能会有所帮助。

否则我会在每个单元格的onChange事件上放置一个监听器,并实时编写。

我需要做类似的事情,我发现在ActionScript中创建一个“数据集”对象和一个类似的CFC可以很好地映射彼此。从Flex中调用远程方法,传递ActionScript对象,然后在CF侧,它将被翻译为CFC。

[RemoteClass(alias = "model.DataSet")] **//maps to the CFC**    
[Bindable]
public class DataSetVO
{       

    public var rows:Array;

    public function DataSetVO() 
    {

    }

}

CFC就是这样。确保将alias属性设置为与actionscript对象中RemoteClass设置的别名相匹配:

<cfcomponent name="DataSet"  alias="model.DataSet"> 
<cfproperty name="rows" type="array" />
</cfcomponent>

"CFC方法以保存数据可以如下:"

    <cffunction name="saveToFile" access="remote" returntype="numeric" hint="">
    <cfargument name="dataSet" type="model.GPDataSet" required="true" />
    <!--- do what you need to do to with arguments.dataSet to 
                  save to a file, database, whatever --->
    <cfreturn 0 />
</cffunction>

来自Flex的呼叫是这样的:

 //make a remote call to save the grid 
 //populate your VO with the contents of the grid, in this case I have an object
 //that gives me one, basically iterate over the dataprovider of the grid
var myVO:DataSetVO = myDataSet.getAsVO();
//calling the remote CFC passing the VO that will be mapped to a CFC on the server
cfsvc.saveToFile(myVO);  

将复杂对象从Flex映射到CF可能有点棘手,但一旦设置好,它就非常好用。

这些文章可能会有帮助。

将此翻译为中文:http://www.jeffryhouser.com/index.cfm/2007/10/9/Why-does-ColdFusion-return-a-CFC-to-Flex-as-a-generic-object

将此翻译成中文:http://mxbase.blogspot.com/2008/07/passing-custom-objects-between-flex-and.html 这篇文章介绍了如何在Flex和JavaScript之间传递自定义对象。





相关问题
热门标签