2013-08-04 5 views
8

कुछ दस्तावेज तैयार की तरह Ember.js में प्रदान की है, लेकिन उसके बाद सब एंबर विचारों प्रतिपादनएक बार कोड निष्पादित करने के बाद सभी दृश्यों को पूरी तरह से

मैं ApplicationView didInsertElement है, जो इतनी काम कर रहा है पर एक ओवरराइड के साथ अब यह सही कर रहा हूँ अब तक: अगर यह तैयार एक एंबर दस्तावेज़ के लिए सही रास्ता है, या

App.ApplicationView = Em.View.extend({ 
    didInsertElement: function() { 
    // Do your magic. 
    } 
}); 

मैं सोच रहा हूँ एंबर इस सरल और बहुत ही सामान्य बात के लिए एक अधिक देशी समर्थन है या नहीं।

उत्तर

5

didInsertElement सही जगह है, लेकिन अगर आप पूरी तरह से सुनिश्चित करें कि आपके कतार प्रस्तुत करना होना चाहता हूँ पूरी तरह से, कुछ इस तरह प्लावित है आप भी afterRender घटना के लिए सुनो सकता:

App.ApplicationView = Ember.View.extend({ 
    didInsertElement: function() { 
    Ember.run.scheduleOnce('afterRender', this, 'processChildElements'); 
    }, 

    processChildElements: function() { 
    // do here what you want with the DOM 
    } 
}); 

आशा है कि यह मदद करता है।

+3

वास्तव में, ApplicationView सही जगह होना प्रतीत नहीं होता है, यह बहुत पहले अनुरोध के लिए काम करता है, लेकिन जब आप उस के बाद अन्य टेम्पलेट प्रतिपादन शुरू , हुक आग नहीं है। मैंने विशेष दृश्य पर IIertertElement को परिभाषित किया है, मैं प्रतिपादन के बाद कोड निष्पादित करना चाहता हूं, और यह ठीक काम करता है, लेकिन यह अच्छा होगा अगर एम्बर के पास हर संक्रमण पर सभी विचारों के बाद एक सामान्य हुक था। – clueless

+0

@clueless, आपने '$ (दस्तावेज़) .ready' का उल्लेख किया है, इसलिए हाँ 'एप्लिकेशन व्यू' पहले अनुरोध के लिए है, अन्य सभी विचारों के लिए आपको ऐसा करने की ज़रूरत है जैसा कि आपने पहले ही टिप्पणी की है। जहां तक ​​मुझे पता है कि सभी विचारों को प्रस्तुत किए जाने के लिए कोई अंतर्निर्मित हुक नहीं है। – intuitivepixel

+0

@clueless '$ (दस्तावेज़) .ready' के बराबर नहीं है, क्योंकि इसके परिणामस्वरूप वैश्विक स्पेगेटी कोड होगा। आपको अपने jQuery तर्क को दृश्य में रखना होगा, जो कि कार्य को सर्वोत्तम रूप से उपयुक्त बनाता है। – mavilein

10

आप बेस व्यू क्लास को फिर से खोलकर और रेंडर कतार में जोड़कर आसानी से "पोस्ट रेंडर" हुक जोड़ सकते हैं।

यहाँ आप को दिखाने के लिए कि कैसे कुछ कोड है:

Ember.View.reopen({ 
    didInsertElement : function() { 
     this._super(); 
     Ember.run.scheduleOnce('afterRender', this, this.didRenderElement); 
    }, 
    didRenderElement : function() { 
     // Override this in your View's 
    } 
}); 
+0

यह सही दिशा में एक कदम है। वर्तमान में मैं किसी भी संक्रमण या रीफ्रेश के बाद पृष्ठ के प्रस्तुत करने पर जावास्क्रिप्ट चलाने की कोशिश कर रहा हूं। मैंने अपने jquery ब्लॉक को विलुप्त होने, कोशिश करने के लिए और पहले और बाद में आवेदन मार्ग में मॉडल हुक को भाग्य के साथ रखने की कोशिश की। कोई विचार? – genkilabs

0
App.ApplicationView = Ember.View.extend({ 
    afterRender: function() { 
    Ember.run.next(this, function() { 
     // This will run one time, after the full initial render. 
    }); 
    } 
}); 
संबंधित मुद्दे