2012-06-26 15 views
6

Ich habe ein modales Popup, das erscheint, wenn ein Editor versucht, eine Komponente mit einigen Werten zu speichern (in diesem Fall ein Datumsfeld in der Vergangenheit).Anguilla - Aktualisieren eines Feldes Wert von einem Popup?

In diesem Popup zeige ich dem Editor ein paar Optionen (sehr ähnlich dem Standard "Open Shared Item" -Dialog) und eine OK/Cancel Button Combo. Bei Abbruch feuere ich das "Abbrechen" -Ereignis und der Editor geht zurück zum Bearbeitungsbildschirm, alles gut hier. Auf "OK" möchte ich den Wert des Feldes so ändern, dass es mit dem gewählten Editor übereinstimmt, und dann speichern.

Ich habe versucht, einen Ansatz mit FieldBuilder und die Probe Boris unter this other topic erwähnt, aber ich kann nicht auf das Feld von meinem Popup-Dialog.

Irgendwelche Vorschläge, wie ich das XML des Artikels (könnte auch eine Seite sein) aus einem modalen Popup ändern könnte?

EDIT: Code verwendet 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

Nach Franks Beratung und etwas Hilfe von Jaime & Frank offline, habe ich es wie folgt zu arbeiten:

  1. Das Popup wird von einer Befehlserweiterung aufgerufen (Speichern & Schließen in meinem Fall)
  2. Die command.js gibt einen Event-Handler, der auf "Eintragen" aufgerufen wird (== OK gedrückt wurde)
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

In meinem Popup ich das ausgewählte Element am vorbei (es ist eine Keyword-ID) an den Ereignishandler :

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

und _onPopupSubmit(e) in der Event-Handler jetzt wieder nur e.data.id, laden Sie dieses Schlüsselwort, erhalten Eigenschaften wie ID & Titel, und aktualisieren Sie die Metadaten des Elements mit item.setMetadata ich gelesen ("new Metadaten mit aktualisierten Werten ").

Einfach :)

+1

Können Sie den Code teilen, den Sie in Ihrem Popup haben? Vermutlich vermisst du irgendwo ein "Elternteil". –

Antwort

4

Ihr Code ausgeführt wird in einem Popup, so dass alle Verweise Sie auf globale Variablen machen aus dem Popup-Fenster gezogen werden.

Also, wenn Sie erhalten die fieldBuilder:

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

$ Anzeige ein Verweis auf eine globale Variable ist. So sucht das tatsächlich nach dem FieldBuilder in dem Popup-Fenster (das nicht über eines verfügt).

Um die FieldBuilder des Component-Fenster, können Sie es aus dem Opener erhalten:

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

Sie könnten tatsächlich vorbei den aktualisierten Wert entweder an eine Callback-Funktion oder mit einem (custom) Ereignis betrachten wollen Allerdings macht das Ihr Popup weniger abhängig von opener. Trick.

+0

Danke Frank, deine Antwort war die Hälfte von dem, was ich brauchte :) Nach einer kurzen Diskussion - und basierend auf deinen Einsichten - habe ich das Ergebnis an meinen "Submit" -Ereignishandler zurückgegeben, werde bald die richtige Antwort posten und versuchen, es zu verpacken up den Code jetzt –

Verwandte Themen