2012-02-02 12 views
6

मेरे पास एक शो व्यू है जो चयनित आइटम को किसी सूची से प्रदर्शित करता है। फिर जब मैं संपादन बटन पर क्लिक करता हूं तो यह {{#if isEditing}}ember.js किसी अन्य दृश्य से दृश्य को बदलना

के माध्यम से संपादन दृश्य प्रदर्शित करता है जब मैं सूची में किसी अन्य आइटम पर क्लिक करता हूं तो डिस्प्ले व्यू नए चयनित आइटम में बदल जाता है लेकिन एडिटिंग स्थिति में रहता है।

मैं किसी अन्य दृश्य से दृश्य की स्थिति बदलना कैसे बदल सकता हूं?

मैंने इस समय फ़ोकसऑट फ़ंक्शन के साथ ऐसा किया है जो सेट पर है जो झूठ बोल रहा है लेकिन मेरे पास इस दृश्य में 2 टेक्स्ट फ़ील्ड हैं और इसलिए जब मैं अन्य टेक्स्ट फ़ील्ड में क्लिक करता हूं तो यह फ़ोकस को भी चालू करता है।

यह आसान होना चाहिए लेकिन इसे समझने के लिए प्रतीत नहीं होता है!

+0

अच्छी तरह से मैं इस लेकिन अपनी सुंदर नहीं कर समाप्त हो गया है और मुझे यकीन है कि यह सही तरीका नहीं है कर रहा हूँ !! @get ('parentView') प्राप्त करें। ('parentView') प्राप्त करें। ('childViews') प्राप्त करें [1] .set ('isEditing', false) –

उत्तर

3

अच्छा सवाल। मुझे लगता है कि App.SelectedItemView की सामग्री को चलाने के लिए आपको सरल बाध्यकारी से थोड़ा अधिक जटिल करने की आवश्यकता है। मैं एक गणना संपत्ति के बजाय की कोशिश करेंगे:

App.SelectedItemView = Ember.View.extend({ 
    isEditing: false, 
    content: function() { 
    var selectedItem = App.SelectedItemController.get('content'); 
    this.set('editingItem', false); 
    return selectedItem; 
    }.property('App.SelectedItemController.content'), 
}); 

गणना की संपत्तियों के बारे में चाल है कि आप एक सरल बंधन के रूप में एक ही बात को पूरा कर सकते हैं, लेकिन आप भी निष्पादित करने के लिए कस्टम कोड जोड़ सकते हैं जब मनाया मूल्य परिवर्तन (जैसे सशर्त इस मामले में editingItem से null सेटिंग)। एक गणना की गई संपत्ति का नकारात्मक पक्ष यह है कि यह दो-तरफा बाध्यकारी करने के लिए थोड़ा अधिक जटिल है (उदाहरण के लिए App.SelectedItemController.content सेट करने के लिए App.SelectedItemView.content परिवर्तन) - लेकिन ऐसा लगता है कि आपको वैसे भी ऐसा करने की आवश्यकता नहीं है।

0

आप दो विचारों को सीधे इस तरह से कनेक्ट नहीं करना चाहते हैं - बल्कि, आप चाहते हैं कि यह सहसंबंध बाध्यकारी के माध्यम से हो (संभवतः इस मामले में नहीं, क्योंकि संपादन बटन को मॉडल से बंधे नहीं लगते हैं या संपत्ति?) या नियंत्रक परत में एक समारोह के माध्यम से?

+0

मूल प्रश्न भी मुझे बहुत रूचि देता है। ज्यादातर मामलों के लिए, बाध्यकारी के माध्यम से जाना सही हो सकता है, लेकिन कभी-कभी आप एक अतिरिक्त एम्बर को स्थापित नहीं करना चाहते हैं। ऑब्जेक्ट या एक दृश्य से डेटा को एक दृश्य से दूसरे पास करने के लिए अतिरिक्त विशेषता। तो, मुझे लगता है कि किसी अन्य दृश्य से डेटा बदलने में सक्षम होना उपयोगी हो सकता है। "नियंत्रक परत के माध्यम से" का क्या मतलब था? –

+0

@jasonpgignac कृपया क्या आप मुझे नियंत्रक परत के माध्यम से ऐसा करने का उदाहरण दिखा सकते हैं? धन्यवाद –

1

मैं किसी अन्य दृश्य से दृश्य की स्थिति को कैसे बदल सकता हूं?

मुझे नहीं लगता कि यह वास्तव में आप क्या करना चाहते चाहते है। आइटम के लिए क्लिक ईवेंट में आप शायद content नियंत्रक की संपत्ति को बदल रहे हैं। content परिवर्तन जब भी आप isEditing झूठी होने के लिए चाहते हैं।

आप इस संभाल करने के लिए एक पर्यवेक्षक की स्थापना कर सकते हैं:

App.SelectedItemView = Ember.View.extend(
{ 
    isEditing: false, 
    contentBinding: 'App.SelectedItemController.content', 
    contentChanged: function() 
    { 
     this.set('isEditing', false); 
    }.observes("content") 
}); 
संबंधित मुद्दे