2012-06-26 7 views
6

Tengo una ventana emergente modal que aparece cada vez que un editor intenta guardar un componente con algunos valores (un campo de fecha en el pasado en este caso).Anguila: ¿está actualizando el valor de un campo de una ventana emergente?

En esta ventana emergente le muestro al editor algunas opciones (muy similar al cuadro de diálogo predeterminado "Abrir elemento compartido") y un combo de botón Aceptar/Cancelar. En Cancelar disparo el evento "cancelar" y el editor vuelve a la pantalla de edición, todo bien aquí. En "OK", deseo cambiar el valor del campo para que coincida con el editor seleccionado, luego guardar.

Intenté utilizar un enfoque con FieldBuilder y la muestra Boris mencionada en this other topic pero no puedo acceder al campo desde el cuadro de diálogo emergente.

¿Alguna sugerencia sobre cómo puedo ir y modificar el xml del elemento (también podría ser una página) desde una ventana emergente modal?

EDIT: Código utilizado en getControlForFieldName

function getControlForFieldName(name) { 
    var fieldBuilder = $display.getView().properties.controls.fieldBuilder; 
    var fieldsContainer = fieldBuilder.properties.input; 
    var fieldsNode = fieldsContainer.getElement(); 
    var fieldContainer = $dom.getFirstElementChild(fieldsNode); 
    while (fieldContainer) { 
     var labelNode = $dom.getFirstElementChild(fieldContainer); 
     var fieldNode = $dom.getNextElementSibling(labelNode); 
     var control = fieldNode.control; 
     if (control.getFieldName() == name) { 
      return control; 
     } 
     fieldContainer = $dom.getNextElementSibling(fieldContainer); 
    } 
} 

editar # 2

Tras el consejo de Frank, y algo de ayuda de Jaime & Frank fuera de línea, lo tengo para trabajar de la siguiente manera:

  1. La ventana emergente se llama desde una Extensión de comando (Guardar & Cerrar en mi caso)
  2. El command.js especifica un controlador de eventos que es llamada en "submit" (== bien se ha pulsado)
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

En mi emergente estoy pasando el elemento seleccionado (que es una palabra clave de identificación) al controlador de eventos :

this.fireEvent("submit", { id: select.options[select.selectedIndex].value }); 

y ahora de nuevo en el controlador de eventos _onPopupSubmit(e) acabo de leer e.data.id, carga esta palabra clave, obtener propiedades como identificador de & Título, y actualizar los metadatos del elemento utilizando item.setMetadata ("nueva metadatos con valores actualizados ").

simple :)

+1

¿Puedes compartir el código que tienes en tu ventana emergente? Lo más probable es que te falte un 'padre' en alguna parte. –

Respuesta

4

Su código se ejecuta en una ventana emergente, por lo que cualquier referencia que realice en las variables globales se tomará de la ventana emergente.

Así que cuando llegue el FieldBuilder:

var fieldBuilder = $display.getView().properties.controls.fieldBuilder; 

$ pantalla es una referencia a una variable global. Así que esto realmente busca el FieldBuilder en la ventana emergente (que no tiene uno).

Para obtener el FieldBuilder de la ventana de componentes, se puede obtener desde el primer partido:

var fieldBuilder = opener.$display.getView().properties.controls.fieldBuilder; 

Es posible que desee considerar la realidad que pasa el valor actualizado ya sea a una función de devolución de llamada o con un evento (personalizado) sin embargo, ya que eso hace que tu ventana emergente sea menos dependiente del truco opener..

+0

Gracias Frank, tu respuesta fue la mitad de lo que necesitaba :) después de una breve discusión, y en función de tus ideas, pasé el resultado a mi controlador de eventos "enviar", publicaré la respuesta correcta pronto, tratando de envolver hasta el código ahora –

Cuestiones relacionadas