2012-06-26 10 views
6

मेरे पास एक मोडल पॉपअप है जो तब भी दिखाई देता है जब कोई संपादक कुछ मानों के साथ एक घटक को सहेजने का प्रयास करता है (इस मामले में अतीत में दिनांक फ़ील्ड)।एंगुइला - पॉपअप से फ़ील्ड का मान अपडेट कर रहा है?

इस पॉपअप में मैं संपादक को कुछ विकल्प दिखाता हूं (डिफ़ॉल्ट "ओपन साझा आइटम" संवाद के समान) और एक ठीक/रद्द करें बटन कॉम्बो। रद्द करें पर मैं "रद्द करें" ईवेंट को आग लगाता हूं और संपादक संपादन स्क्रीन पर वापस जाता है, यहां सब कुछ अच्छा है। "ठीक है" पर, मैं जो भी संपादक चुना है उससे मिलान करने के लिए फ़ील्ड के मान को बदलना चाहता हूं, फिर सहेजें।

मैंने फ़ील्डबिल्डर और this other topic पर नमूना बोरिस के साथ एक दृष्टिकोण का उपयोग करने की कोशिश की लेकिन मैं अपने पॉपअप संवाद से मैदान में नहीं जा सकता।

एक मॉडल पॉपअप से आइटम के एक्सएमएल (एक पृष्ठ भी हो सकता है) को संशोधित और संशोधित करने के बारे में कोई सुझाव?

संपादित करें: कोड 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); 
    } 
} 

संपादित करें # 2

फ्रैंक की सलाह, और से जैमे & फ्रैंक ऑफ़लाइन कुछ मदद के बाद, मैं इस प्रकार के रूप में यह काम करने के लिए मिल गया:

  1. पॉपअप को कमांड एक्सटेंशन से बचाया जाता है (& मेरे मामले में बंद करें)
  2. command.js एक ईवेंट हैंडलर
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

मेरी पॉपअप में "सबमिट करें" (== ठीक दबाया गया था) पर बुलाया जाता है कि मैं ईवेंट हैंडलर के लिए चयनित आइटम (यह एक कीवर्ड आईडी है) गुजर रहा निर्दिष्ट करता है :

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

और अब ईवेंट हैंडलर _onPopupSubmit(e) मैं बस,, e.data.id पढ़ इस कीवर्ड लोड की तरह आईडी & शीर्षक गुण मिलता है, और item.setMetadata का उपयोग कर आइटम के मेटाडाटा को अद्यतन में वापस ("नया अद्यतन मूल्यों के साथ मेटाडेटा ")।

सरल :)

+1

क्या आप अपने पॉपअप में जो कोड साझा कर सकते हैं? सबसे अधिक संभावना है कि आप कहीं 'माता-पिता' खो रहे हैं। –

उत्तर

4

आपका कोड एक पॉपअप में चलता है, इसलिए किसी भी संदर्भ आप वैश्विक चर करने के लिए बनाने के पॉप अप विंडो से ले जाया जाएगा।

तो जब आप fieldBuilder मिलती है:

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

$ प्रदर्शन एक वैश्विक चर के लिए एक संदर्भ है। तो यह वास्तव में पॉपअप विंडो में फ़ील्डबिल्डर की तलाश करता है (जिसमें एक नहीं है)।

घटक विंडो के FieldBuilder पाने के लिए आपको सलामी बल्लेबाज से प्राप्त कर सकते हैं:

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

आप वास्तव में अपडेट मान न तो कोई कॉलबैक फ़ंक्शन या एक (कस्टम) घटना के साथ करने के लिए गुजर विचार करना चाह सकते हालांकि, चूंकि इससे आपका पॉपअप opener. चाल पर कम निर्भर करता है।

+0

धन्यवाद फ्रैंक, आपका उत्तर मुझे जो चाहिए था उसका आधा था :) एक छोटी सी चर्चा के बाद - और आपकी अंतर्दृष्टि के आधार पर - मैंने परिणाम को "सबमिट" ईवेंट हैंडलर पर वापस कर दिया, मैं जल्द ही सही उत्तर पोस्ट करूंगा, लपेटने की कोशिश कर रहा हूं अब कोड ऊपर –

संबंधित मुद्दे