2015-03-11 7 views
5

जब एक उल्का ईवेंट हैंडलर बनाने, क्या ... के बीच का अंतर हैTemplate.Instance() बनाम template.data के बीच क्या अंतर है?

'click .something': function(e,t){ 
    var data = t.data 
} 

बनाम

'click .something': function(e,t){ 
    var data = Template.instance().data 
} 

वे दोनों एक ही डेटा को लाने के लिए लग रहे हैं। क्या कोई कारण है कि मुझे एक या दूसरे क्यों चाहिए?

+0

'Template.instance' (इस समय) ही उपयोगी है सहायकों में अन्य स्थानों (जैसे 'निर्मित' कॉलबैक, 'रेंडर' कॉलबैक इत्यादि) आप टेम्पलेट इंस्टेंस को अन्य तरीकों से प्राप्त कर सकते हैं, लेकिन इन मामलों में आप 'टेम्पलेट.inस्टेंस' का उपयोग भी कर सकते हैं यदि आप चाहें। –

+0

नोट जैसा कि मैंने नीचे दिए गए मेरे उत्तर में लिखा था कि जब आप Template.instance() डेटा तक पहुंच सकते हैं, तो आपको इस संदर्भ पर अपना डेटा नहीं रखना चाहिए, या अगले टेम्पलेट रेंडर पर यह गायब होने का जोखिम नहीं है। – MrE

उत्तर

2

यह वास्तव में Template.instance() (निचले i के साथ) है, और चूंकि यह फ़ंक्शन वर्तमान टेम्पलेट आवृत्ति को दायरे में लौटाता है (जिस पर घटना उत्पन्न हुई थी), ईवेंट ईवेंट हैंडलर के दूसरे पैरामीटर के साथ कोई अंतर नहीं है, जिसमें यह भी है वर्तमान टेम्पलेट उदाहरण, यही कारण है कि आप इवेंट हैंडलर में Template.instance().data या t.data का उपयोग करके टेम्पलेट डेटा को उदासीन रूप से एक्सेस कर सकते हैं।

हालांकि ईवेंट हैंडलर के अंदर वर्तमान डेटा संदर्भ तक पहुंचने का एक आसान तरीका है: this ऑब्जेक्ट डेटा संदर्भ से जुड़ा हुआ है जहां ईवेंट ट्रिगर किया गया था।

7

इसी प्रकार यहां सवाल:

टेम्पलेट जीवन चक्र कार्यों में (onCreated, onRendered ...) thisTemplate.instance() तो this.data के बराबर है:

Difference between Template.instance() and this

बात को एहसास है कि है उस समय Template.instance().data जैसा ही है!

एक सहायक या घटना में, this वर्तमान डेटा संदर्भ है।

आप किसी टेम्पलेट को डेटा पास हैं, तो टेम्पलेट नए डेटा के साथ फिर से रेंडर किया जाएगा: डाटा संदर्भ अगर नदी के ऊपर अपने डेटा परिवर्तन समय के साथ बदल सकते हैं:

तो, एक महत्वपूर्ण बात यहाँ ध्यान दें । नया डेटा = नया डेटा संदर्भ।

तो आप की तरह कुछ करना है, तो:

Template.example.onCreated(function() { 
    this.data.myKey = "my example data set on template creation"; //WRONG! 
    // or equivalently: 
    Template.instance().data.myOtherKey = "another key"; //WRONG! 
}) 

अच्छी तरह से, यह डेटा this (अर्थात जिसे संदर्भ) अपने सहायक (this.myKey), लेकिन केवल तब तक नदी के ऊपर डेटा परिवर्तित नहीं होता के रूप में के तहत हो सकता है।

जैसे ही अपस्ट्रीम डेटा बदलता है, this नया डेटा संदर्भ होगा, और इसमें आपका अतिरिक्त डेटा नहीं होगा।

तो, सारांश में:

आप onCreated या onRendered में अपने टेम्पलेट के लिए संदर्भ जोड़ना, सुनिश्चित करें कि आप मौजूदा डेटा संदर्भ के लिए यह बाँध नहीं करते हैं, लेकिन खाका करने के लिए की जरूरत है।उदाहरण()

आपको क्या करना चाहिए:

Template.example.onCreated(function() { 
    this.myKey = "my example data set on template creation"; 
    // or equivalently: 
    Template.instance().myOtherKey = "another key"; 
}) 

और आप के माध्यम से सहायक में इस डेटा और घटनाओं का उपयोग कर सकते

Template.instance().myKey

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