2012-06-26 11 views
6

Mam modalne wyskakujące okienko, które pojawia się za każdym razem, gdy edytor próbuje zapisać komponent z pewnymi wartościami (w tym przypadku pole daty w przeszłości).Anguilla - Aktualizacja wartości pola z wyskakującego okienka?

W tym oknie pokażę edytorowi kilka opcji (bardzo podobne do domyślnego okna dialogowego "Otwórz udostępniony element") i kombinację przycisku OK/Anuluj. W trybie Anuluj uruchamiam zdarzenie "anuluj", a edytor powraca do ekranu edycji, wszystko dobrze tutaj. W "OK" chcę zmienić wartość pola tak, aby pasowała do wybranego edytora, a następnie zapisać.

Próbowałem użyć podejścia z FieldBuilder i próbki Borys wymienionych na this other topic, ale nie mogę dostać się do pola z mojego okna podręcznego.

Jakieś sugestie, w jaki sposób mogę przejść i zmodyfikować xml elementu (może to być również strona) z modalnego okna podręcznego?

EDIT: Kod stosowany w 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

Po poradę Franka i pewną pomocą Jaime & Frank trybie offline, mam go do pracy w następujący sposób:

  1. popup jest wywoływany z rozszerzenia poleceń (zapisz & Zamknij w moim przypadku)
  2. Command.js określa moduł obsługi zdarzeń, który pobiera o nazwie na „submit” (== OK został naciśnięty)
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

W moim popup ja przechodząc wybrany element (jest to słowo kluczowe ID) do obsługi zdarzeń :

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

a teraz z powrotem do obsługi zdarzeń _onPopupSubmit(e) właśnie przeczytałem e.data.id załaduj tego słowa kluczowego, uzyskać właściwości, takie jak identyfikator & tytułu i aktualizacji metadanych elementu przy użyciu item.setMetadata ("nowa metadane z zaktualizowanymi wartościami ").

Proste :)

+1

Czy możesz udostępnić kod, który masz w swoim wyskakującym okienku? Najprawdopodobniej brakuje ci "rodzica" gdzieś. –

Odpowiedz

4

Twój kod działa w popup, więc wszelkie odniesienia wprowadzone do zmiennych globalnych zostanie podjęta w oknie popup.

Więc kiedy masz fieldBuilder:

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

$ wyświetlacz jest odwołaniem do zmiennej globalnej. Tak więc to faktycznie wyszukuje FieldBuilder w oknie podręcznym (które nie ma).

Aby uzyskać FieldBuilder komponentowego oknie, można go pobrać z otwieraczem:

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

Można rozważyć faktycznie przechodząc zaktualizowaną wartość albo funkcja zwrotna lub z (niestandardowe) imprezy jednak, ponieważ powoduje to, że twoje okienko wyskakujące mniej zależne od sztuczki opener..

+0

Dzięki Frank, twoja odpowiedź była połową tego, co było mi potrzebne :) po krótkiej dyskusji - i na podstawie twoich spostrzeżeń - przekazałem wynik z powrotem do mojej obsługi zdarzeń "wyślij", wkrótce opublikuję poprawną odpowiedź, próbując zawinąć teraz kod –

Powiązane problemy