2012-05-13 16 views
6

में डाला गया है, एम्बर पर एक विधि में। दृश्य उपclass, मैं केवल DOM में परिवर्तन करना चाहता हूं यदि दृश्य तत्व पहले से ही DOM में डाला गया है। मैं इसे कैसे देख सकता हूं?Ember.js: जांचें कि क्या देखने के तत्व को DOM

मैं जानता हूँ कि मैं बहुत की तरह एक सहायक संपत्ति बना सकते हैं:

didInsertElement: function() { 
    this.set('elementIsInserted', true); 
} 
willDestroyElement: function() { 
    this.set('elementIsInserted', false); 
} 

लेकिन वहाँ कुछ विहित, निर्मित तरीका है?

मुझे view.js स्किमिंग कुछ भी नहीं मिला, लेकिन शायद मुझे कुछ याद आ रहा है।

उत्तर

9

आप एक सहायक ध्वज सेट करने के लिए होने से बचने के लिए चाहते हैं, तो आप Ember.View विस्तार कर सकते हैं:

Ember.View.reopen({ 
    didInsertElement: function() { 
     this.set('elementIsInserted', true); 
     this._super(); 
    }, 

    willDestroyElement: function() { 
     this.set('elementIsInserted', false); 
     this._super(); 
    } 
}); 

अब हर देखें फैली कि Ember.View ऊपर मिल जाएगा।

इसके अलावा कोर टीम के एक सदस्य ने सुझाव दिया कि आप inDOM का जिक्र करने से बचें क्योंकि यह एक आंतरिक चर है और कोड में उपयोग करने का इरादा नहीं है।

+0

धन्यवाद! ऐसा लगता है कि एक नुकसान यह है कि अब आपको 'this._super()' को कॉल करना होगा जब भी आप अपना खुद का घोषित करते हैं IberertElement Ember.View के उप-वर्गों में। –

+0

यह वही है जो मुझे संक्षिप्त उत्तर के लिए धन्यवाद चाहिए। – Nomad101

+0

तो आप इसे अपने नियंत्रक के अंदर से कैसे एक्सेस करते हैं? मान लें कि मेरे पास नियंत्रक में कुछ कोड है कि दृश्य को डालने के बाद ही मैं भागना चाहता हूं लेकिन मैं नहीं चाहता कि अंदर कोड उस प्रविष्टि को किया जाए। मैं इस ध्वज की जांच करूंगा और विधि पर एक .observes() डालूँगा? धन्यवाद! – bfcoder

13

प्रत्येक दृश्य में _state संपत्ति है, जो तत्व डालने पर "inDOM" पर सेट होता है।

if (this._state=="inDOM") doStuff(); 

काम करना चाहिए। सुनिश्चित करें कि आपके पास सही this है!

+0

मैंने जैक के जवाब को स्वीकार कर लिया है क्योंकि मुझे लगता है कि यह अधिक "सही" है, लेकिन मैं वास्तव में इसे अपने ऐप में कर रहा हूं क्योंकि यह आसान है। मैं इसे एक संपत्ति में encapsulating कर रहा हूँ ताकि इसे आसानी से बदला जा सके: https://gist.github.com/246bbf7305e09ed7ce80 –

+0

एम्बर 1.6 में 'राज्य' संपत्ति का नाम बदलकर '_state' कर दिया गया था और पुराने रूप को बहिष्कृत के रूप में चिह्नित किया गया है 1.8 में – Gil

+0

@Gil धन्यवाद। मैं जवाब संपादित कर दूंगा। – weltraumpirat

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