Flex: сохранение редактируемой сетки данных через CFC - PullRequest
1 голос
/ 12 марта 2009

У меня есть редактируемая сетка данных, которую нужно сохранить в других полях формы через CFC в ColdFusion.

По сути, цель состоит в том, чтобы было определенное количество местоположений, извлеченных с помощью RO, которые составляют первый столбец, остальные столбцы - это типы данных, т.е. демографические данные, заметки клиентов, встречи и т. Д., Идея заключается в том, чтобы пользователь отмечал каждое из флажки в сетке, чтобы указать, что они рады поделиться типом данных с этими местоположениями. Это должно быть сделано таким образом, поскольку местоположения могут меняться, чтобы со временем их могло быть два, четыре или более.

Код работает до сих пор работает и выглядит хорошо, но экономия немного сводит меня с ума !! Пожалуйста, помогите.

Спасибо заранее :) код (сокращен по соображениям здравого смысла) ниже:

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>

Ответы [ 3 ]

1 голос
/ 13 марта 2009

Похоже, что вы хотите вернуть все содержимое DataGrid обратно как элемент остальных данных вашей формы. Я все еще изучаю Flex, но я верю, что он будет автоматически преобразован из ArrayCollection в Query, поскольку вы используете AMF.

Поскольку вы не используете атрибут dataProvider для своей DataGrid, я предполагаю, что вы связываете объект ArrayCollection с DataGrid в функции init, которую вы вызываете из события creationComplete. В этом случае вы должны сделать обратное, прежде чем возвращать данные формы на сервер: скопируйте значения DataGrid обратно в возвращаемую переменную.

В качестве альтернативы вы можете использовать привязываемую переменную ArrayCollection, чтобы при обновлении пользователем DataGrid переменная ArrayCollection уже обновлялась, и вы могли просто вернуть ее обратно в ColdFusion.

0 голосов
/ 30 сентября 2009

Мне нужно было сделать нечто подобное, и я обнаружил, что это хорошо работает для создания объекта «набор данных» в 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() 
    {

    }

}

ХФУ такой. Убедитесь, что атрибут alias соответствует псевдониму, заданному в RemoteClass объекта actionscript:

<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

0 голосов
/ 13 марта 2009

Я не знаю Flex в CF, но вы определили, хотите ли вы сохранить их все сразу или по какому-то действию «Сохранить» или «Отправить»?

Если вы собираетесь сохранить их все сразу, тогда этот пост на Итерации по запросу ColdFusion во Flex могут быть полезны.

В противном случае я просто поместил бы Listener на событие onChange в каждой ячейке и записал бы его в режиме реального времени.

...