2012-06-26 12 views
6

Bir editör, bazı değerleri içeren bir bileşeni (bu durumda geçmişte bir tarih alanı) kaydetmek istediğinde görünen kalıcı bir açılır pencerem var.Anguilla - Bir alanın pop-up değerinden mi güncelleniyor?

Bu açılır pencerede editöre birkaç seçenek (varsayılan "Açılan Öğe Aç" iletişim kutusuna çok benzer) ve bir Tamam/İptal düğmesi açılanını gösteriyorum. Açık İptal "İptal" olayını tetiklerim ve editör düzenleme ekranına geri döner, hepsi burada iyi. "Tamam" da, alanın değerini, editörün seçimi ne olursa olsun eşleştirmek için değiştirmek istiyorum, sonra da kaydedin.

FieldBuilder ve this other topic numaralı örnekte Boris ile bir yaklaşım kullanmayı denedim ancak açılan iletişim kutusundan alana alamıyorum.

Kalıcı bir açılır pencereden öğenin xml'sini (ayrıca bir sayfa da olabilir) nasıl değiştirebileceğimi ve değiştirebileceğim hakkında herhangi bir öneriniz var mı?

DÜZENLEME: Kod getControlForFieldName kullanılan

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); 
    } 
} 

DÜZENLEME 2. Frank'in tavsiye, Jaime & Frank çevrimdışı bazı yardımıyla sonra aşağıdaki gibi çalışması için var

:

  1. Açılır pencereye Komut Uzantısı denir (Benim durumumda & Kapat)
  2. command.js Ben olay işleyicisi seçili öğeyi (bir anahtar kelime kimliği var) geçirerek (== Tamam basılmış) Benim popup penceresinde
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

"Gönder" üzerine çağrılan bir olay işleyicisi belirtir :

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

ve şimdi geri olay işleyicisi _onPopupSubmit(e) sadece e.data.id okumak bu anahtar kelimeyi yüklemek, kimlik & Başlığı gibi özelliklerini almak ve item.setMetadata kullanarak öğenin meta verileri güncellemek içinde ("yeni güncellenmiş değerlere sahip meta veriler ").

Basit :)

+1

Pop-up'ınızda sahip olduğunuz kodu paylaşabilir misiniz? Muhtemelen bir yerde bir ebeveyn eksik. –

cevap

4

Kodunuz açılan pencerede çalışır, bu nedenle küresel değişkenlere yapmak başvurular açılan pencereden alınacaktır.

Yani fieldBuilder olsun:

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

$ ekran global değişkene bir referanstır. Yani bu aslında popup penceresinde (bir tane yok) FieldBuilder'ı arar.

Bileşen pencerenin FieldBuilder almak için, açacağı adresinden elde edebilirsiniz:

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

Ya bir geri çağırma işlevi veya (özel) olayla güncellendi değer geçirerek aslında düşünebilirsiniz Ancak, bu, pop-up'ınızı opener. numarasına daha az bağımlı hale getirdiğinden beri.

+0

Teşekkürler Frank, cevabınız ihtiyacım olanın yarısıydı :) kısa bir tartışmadan sonra - ve içgörülerinize dayanarak - sonucu "gönder" olay işleyicime iletdim, kısa bir süre sonra doğru cevabı göndereceğim şimdi kodu yükselt –