2015-02-09 5 views
7

पर बाहरी स्क्रिप्ट शामिल है, मैं बाहरी जावास्क्रिप्ट स्रोत (प्रदर्शनी) को शामिल करने का तरीका जानने का प्रयास कर रहा हूं, लेकिन केवल साइट पर एक ही पृष्ठ के लिए। क्या यह दृश्य या टेम्पलेट में किया जा सकता है?Ember.js में विशिष्ट पृष्ठ

मैंने पाया कि पेज टेम्पलेट में <script src="exhibit.js"></script> जोड़ना काम नहीं करता है। यदि मैं इसे पूरी साइट के लिए टेम्पलेट में जोड़ता हूं तो यह ठीक है, हालांकि यह प्रत्येक पृष्ठ पर लोड होता है।

मेरी समस्या का दूसरा पक्ष प्रदर्शन के लिए अधिक विशिष्ट हो सकता है। पृष्ठ लोड होने पर हर बार स्क्रिप्ट प्राप्त करने का कोई तरीका है? उदाहरण: जब मैं पहली बार उस पृष्ठ पर जाता हूं जिसमें प्रदर्शन स्क्रिप्ट शामिल है, तो यह प्रदर्शनी सहित एम्बर ऐप लोड करता है और पृष्ठ ठीक से प्रदर्शित होता है। मैं पृष्ठ से दूर नेविगेट करता हूं, जब मैं पृष्ठ पर वापस आ जाता हूं तो प्रदर्शन स्क्रिप्ट को पुनः लोड नहीं किया जाता है, इस प्रकार पृष्ठ को ठीक से वापस नहीं लाया जाता क्योंकि यह पहली बार हुआ था।

+0

क्या आप घटकों का उपयोग करके अपना आवेदन बना रहे हैं? –

उत्तर

14

आप एंबर CLI और exhibit.js से अपने ऐप्लिकेशन का निर्माण कर रहे हैं, तो एक काफी छोटे फ़ाइल आप से बेहतर हो सकता है आपके vendor.js फ़ाइल HTTP अनुरोध mininize में exhibit.js भी शामिल है।

// app/controllers/some-route-name.js  

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    loadPlugin: function() { 
    // Use run loop if you need to setup the DOM first 
    Ember.run.scheduleOnce('afterRender', this, function() { 
     Ember.$.getScript('path/to/exhibit.js'); 
    }); 
    }.on('init') 

}); 

यह अतुल्यकालिक रूप से फ़ाइल लोड होगा:

हालांकि, अपने polyfill विधि इतनी तरह this answer में वर्णित इस्तेमाल कर सकते हैं यदि आप एक ही मार्ग में exhibit.js लोड करना चाहते हैं। getScript docs are here - आप देखेंगे कि आप भी कॉलबैक का उपयोग कर सकते हैं।

यदि लोड होने से पहले आपको DOM सेटअप की आवश्यकता नहीं है, तो आप रन लूप को हटा सकते हैं। नियंत्रक के init ईवेंट पर इस स्क्रिप्ट को लोड करने से उपयोगकर्ता हर बार रूट पर जाने के लिए इसे फिर से लोड करने से रोक देगा। यदि आप करते हैं प्रत्येक बार जब आप getScript को didInsertElement ईवेंट में स्थानांतरित कर सकते हैं तो स्क्रिप्ट लोड करना चाहते हैं।

+0

धन्यवाद! मैंने 'didInsertElement' में getScript डाला और यह पूरी तरह से काम करता है। – Jared