Hello,
I am having strange problems (described below) when hitting the
"reload" button on my browser when displaying form B in scenario
described below. Could anyone please help me understand why?
I am using a 2-form approach to editing an XML file, one for a first level view and a deeper detail editing view.
Form "A" only contains a repeater with a "nombre" widget for each row,
plus all the necessary widgets for deleting selected rows.
It also has a submit called "nuevo" (=Add new, see below for js code
managing it), a standard HTML submit button, and an edit submit button
on each row.
Example:
[Delete selected] [Add new] [Save changes]
[X] [Edit] Name1
[X] [Edit] Name2
[X] [Edit] Name3
[X] [Edit] Name4
Form "B" is bound to the same XML file, but with more fields and
attributes mapped to form widgets, but it only maps a certain part of
the XML.
Example:
Name: [Name1]
E-mail: [[EMAIL PROTECTED]]
[Save changes]
So the binding for B is dynamically generated by a pipeline.
The flow should be
A->B->A if "Edit" or "Add new" are used.
A->A if "delete selected" or "save changes" are used.
function editarRestaurantes() {
// Keep important things in vars, as they will be lost from cocoon.parameters
var formDefinitionA = cocoon.parameters["form-definition-a"];
var formDefinitionB = cocoon.parameters["form-definition-b"];
var bindingURIA = cocoon.parameters["bindingURI-a"];
var bindingURIBPrefix = cocoon.parameters["bindingURI-b-prefix"];
var saveURI = cocoon.parameters.saveURI;
var saveXSLT = cocoon.parameters.saveXSLT;
var displayPipelineLista = cocoon.parameters["displayPipeline-a"];
var displayPipelineFicha = cocoon.parameters["displayPipeline-b"];
var formLista = null;
var formFicha = null;
var formB = null;
var datos = leerDatos(cocoon.parameters.loadURI); // Read the XML file and store into "datos"
formLista = createForm(formDefinitionA, bindingURIA, datos);
while(true) {
// display form A
formLista.showForm(displayPipelineLista);
// *********************************
// If I hit reload when form B is displayed, execution is resumed here, but formLista is undefined
// Why is it "null"? Shouldn't it be restored to the previous value because of my hitting "Reload".
// *********************************
var submitWidget = formLista.getWidget().getSubmitWidget();
var idRestaurante = "";
// Did the user not click the "Save changes" button?
if(submitWidget!=null) {
cocoon.log.info(submitWidget);
// Did the user click "Add new"?
if(submitWidget.id=="nuevo") {
// To add a new record, we ask the repeater to do so.
var repeater = submitWidget.parent.lookupWidget('restaurantes');
repeater.addRow();
// New record is last, so get the repeater size
idRestaurante = repeater.size;
} else {
// Clicked "Edit", ... which row?
idRestaurante = submitWidget.getParent().lookupWidget('id').value;
}
formLista.save(datos);
formLista = null;
// Prepare form B, using the ID for the new or edited record
formFicha = createForm(formDefinitionB,
bindingURIBPrefix+idRestaurante, datos);
// ***********************
// Form B is displayed on next line
// ***********************
formFicha.showForm(displayPipelineFicha);
formFicha.save(datos);
formFicha = null;
formLista = createForm(formDefinitionA, bindingURIA, datos);
} else {
formLista.save(datos);
}
grabarDatos(saveURI, saveURI+".tmp", saveXSLT, datos);
}
}
function createForm(definition, binding, datos) {
var form = new Form(definition);
if (binding != null) {
form.createBinding(binding);
}
form.load(datos);
return form;
}
Thank you very much for any hint, and sorry for the long e-mail. I tried hard to make it shortest possible.
--
Antonio
- flow problem with reload button Antonio Fiol Bonnín
- Re: flow problem with reload button Sylvain Wallez
- Re: flow problem with reload button Antonio Fiol Bonnín
- Re: flow problem with reload button Antonio Fiol Bonnín
- Re: flow problem with reload button Christoph Hermann
- Re: flow problem with reload button Christoph Hermann
- Re: flow problem with reload button Antonio Fiol Bonnín