2012-06-26 13 views
6

Ho un popup modale che viene visualizzato ogni volta che un editor tenta di salvare un componente con alcuni valori (un campo data nel passato in questo caso).Anguilla - Aggiornamento del valore di un campo da un popup?

In questo popup mostro all'editor alcune opzioni (molto simili alla finestra di dialogo predefinita "Apri elemento condiviso") e un pulsante OK/Annulla. Su Annulla sparo l'evento "cancella" e l'editor ritorna alla schermata di modifica, tutto bene qui. Su "OK" voglio cambiare il valore del campo per abbinare qualunque sia l'editor selezionato, quindi salvare.

Ho provato a utilizzare un approccio con FieldBuilder e il campione Boris menzionato su this other topic ma non riesco ad accedere al campo dalla finestra di dialogo popup.

Qualche suggerimento su come posso andare a modificare l'xml dell'articolo (potrebbe essere anche una pagina) da un popup modale?

EDIT: codice utilizzato in 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); 
    } 
} 

EDIT # 2

Dopo il consiglio di Frank, e qualche aiuto da Jaime & Frank in linea, ho preso a lavorare come segue:

  1. Il popup viene chiamato da un'estensione di comando (Salva & Chiudi nel mio caso)
  2. Il command.js specifica un gestore di eventi che viene chiamato il "submit" (== OK è stato premuto)
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

Nella mia comparsa sto passando l'elemento selezionato (si tratta di un ID parola chiave) al gestore di eventi :

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

e ora di nuovo nel gestore di eventi _onPopupSubmit(e) ho appena letto e.data.id, caricare questa parola chiave, ottengo immobili come ID & titolo, e aggiornare i metadati della voce usando item.setMetadata ("nuova metadati con valori aggiornati ").

semplice :)

+1

Puoi condividere il codice che hai nel tuo popup? Molto probabilmente ti manca un "genitore" da qualche parte. –

risposta

4

Il codice viene eseguito in un pop-up, in modo da tutti i riferimenti apportate alle variabili globali sarà presa dalla finestra pop-up.

Così quando si ottiene il fieldBuilder:

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

$ display è un riferimento a una variabile globale. Quindi questo in realtà cerca FieldBuilder nella finestra popup (che non ne ha uno).

Per ottenere l'FieldBuilder della finestra dei componenti, si può ottenere dalla apertura:

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

Si potrebbe prendere in considerazione in realtà passando il valore aggiornato a uno una funzione di callback o con un evento (personalizzato) tuttavia, poiché ciò rende il tuo popup meno dipendente dal trucco opener..

+0

Grazie Frank, la tua risposta era metà di quello che mi serviva :) dopo una breve discussione - e in base alle tue intuizioni - ho passato il risultato al mio gestore di eventi "submit", pubblicherò presto la risposta corretta, cercando di avvolgere up the code now –

Problemi correlati