2012-08-09 19 views
7

पर देखने में कार्रवाई को संभालने में कोई दृश्य नहीं है जिसमें विस्तारणीय/संक्षिप्त सामग्री है जिसे मैं तालिका पंक्ति पर क्लिक करके टॉगल करने में सक्षम होना चाहता हूं।राउटर

<tr {{action "expand"}}> 

जो पहले मेरे विचार पर संचालित किया गया:

App.ContentRowView = Em.View.extend({ 
    templateName: 'ember/templates/content/row', 
    expand: function() { 
     this.set('isExpanded', !this.get('isExpanded')); 
    }, 
    isExpanded: false 
}); 

हालांकि, कार्रवाई pre1.0 को अपग्रेड करने के बाद अब तक सीधे मैदान में उतारा है pre1.0 से पहले, मैं टेम्पलेट में इस था रूटर। यह कई स्थितियों में समझ में आता है, लेकिन इस मामले में विस्तार वास्तव में एक चिंता चिंता है। मैंने भाग्य के बिना एक क्लिक इवेंट हैंडलर के साथ बस इसे बदलने की कोशिश की है।

क्या प्री 1.0 के साथ इस तरह की दृश्य चिंता घटना को संभालने के तरीके पर सबसे अच्छा अभ्यास है?

उत्तर

20

पदावनत उत्तर


भी की जवाब अगर @ out2344 काम करता है, मुझे लगता है कि यह बिल्कुल सही नहीं है। वास्तव में parentView दृश्य का प्रतिनिधित्व नहीं करता है, लेकिन इसके मूल दृश्य के parentView। 1.0-पूर्व के बाद से, दृश्य उनके संदर्भ को संरक्षित करते हैं, इसलिए टेम्पलेट में, this अभिभावक दृश्य का प्रतिनिधित्व करता है, parentViewparentView.parentView का प्रतिनिधित्व करता है, और view वर्तमान दृश्य का प्रतिनिधित्व करता है। मेरे लिए http://jsfiddle.net/Sly7/cnmJa/

जवाब {{action expand target="view"}}

संपादित

कार्रवाई सहायकों में एक रूटर आधारित थोड़ा अलग व्यवहार करते हैं (बेन-हैम @Gal को जवाब दे) है: यहाँ इस वर्णन करने के लिए एक बेला है आवेदन। दस्तावेज़ से उद्धरण:

रूटर पर ही आधारित अनुप्रयोगों में, अगर एक कार्रवाई एक दृश्य द्वारा रोक नहीं है, उस घटना का अप करने के लिए बुलबुला जिसमें उस दृश्य प्रस्तुत किया गया है जाएगा। यदि वह रूट किसी अन्य मार्ग का उप-मार्ग है तो संक्रमण को शीर्ष-स्तर मार्ग परिभाषा तक, हमारे uber-कंटेनर: रूट तक सभी तरह से मांगे जायेंगे।

यह बुलबुला प्रभाव कुछ कार्यों को निजी रहने की अनुमति देता है। यदि कुछ संक्रमण केवल कुछ उप-उप-राज्यों के लिए उपलब्ध होना चाहिए, तो उप-राज्य पर संक्रमण डालें और आपने एक प्रकार का स्कोपिंग हासिल कर लिया है।

मूल रूप से, मेरे लिए कि रूटर पर ही आधारित क्षुधा में अर्थ है कि यदि आप स्पष्ट रूप से कार्रवाई सहायक में एक लक्ष्य को परिभाषित नहीं है, यह रूटर से भेजा जाता है।


अपडेट किया गया जवाब

मुझे लगता है कि अब गाइड इस सवाल का बहुत अच्छी तरह से जवाब।http://emberjs.com/guides/templates/actions/#toc_specifying-a-target

+0

राउटर दस्तावेज़ http://emberjs.com/guides/router_primer/#toc_navigation स्पष्ट रूप से विचारों और राउटर तक एक बुलबुला प्रभाव से संभाले जाने वाले ईवेंट के बारे में बोलते हैं। मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है और सबकुछ सीधे राउटर पर जाता है, या दस्तावेज गलत/पुराने हैं? –

+0

मैंने अपना जवाब दस्तावेज़ को क्यूटोइंग संपादित किया है। –

+1

बहुत अच्छी तरह उत्तर दिया, यह भ्रम का मुद्दा है ... – hagope

1

pre1.0 में आप लक्ष्य = "parentView" कार्रवाई के लिए जोड़कर कार्रवाई दृश्य क्षेत्र बना सकते हैं:

{{action "expand" target="parentView"}} 
+1

तुम भी लक्ष्य लपेट सकता है का उपयोग कर एक वस्तु/दृश्य पर (यदि आप कई कार्यों और/या बाइंडिंग है) एक ' {{with}} 'कथन। – SciSpear

1

ईवेंट डिफ़ॉल्ट रूप से दृश्य-पदानुक्रम के माध्यम से बबल नहीं होते हैं। आप इसे बदल सकते हैं (हालांकि मैं यह नहीं कह सकते कि मैं यह सलाह देते हैं):

(function() { 
    Ember.View.reopen({ 
     // Let actions bubble to parentView by default. 
     target: function() { 
      return this.get('parentView'); 
     }.property('parentView') 
    }); 
})(); 
संबंधित मुद्दे