2015-07-06 11 views
9

मैं सोच रहा था कि क्या foo() को func="foo()" विशेषता के रूप में कार्य करना संभव था और इसे बहुलक तत्व के अंदर this.func() कहा जाता है?एक विशेषता मान के रूप में एक फ़ंक्शन पास करना

<foo-bar func="foo()"></foo-bar> 


Polymer({ 
    is: 'foo-bar', 
    properties: { 
    func: Object, 
    }, 
    ready: function() { 
    this.func(); 
    } 
}); 

मैं इसे बिना किसी किस्मत के उम्र के लिए काम करने की कोशिश कर रहा हूं।

अग्रिम धन्यवाद।

+0

तो आपका मूल तत्व फ़ंक्शन 'foo' को परिभाषित करता है और आपके बच्चे तत्व (' foo-bar') इसे कॉल करने का प्रयास कर रहा है? –

+0

@BenThomas यह सिर्फ एक विशेषता मान के रूप में एक समारोह गुजर रहा है। हम बस सादगी के लिए मान लेंगे कि HTML दस्तावेज़ में ऐसा दिखाई देता है। इस मामले में कोई मूल तत्व नहीं है। –

+0

[यहां इस प्रश्न के अधिक जवाब हैं] (https://stackoverflow.com/q/31441401/1640892)। ... https://stackoverflow.com/q/31441401/1640892 – Mowzer

उत्तर

2
<foo-bar func="foo()"></foo-bar> 



Polymer({ 
    is: 'foo-bar', 
    properties: { 
    func: { 
     type: String, // the function call is passed in as a string 
     notify: true 
    }, 
    attached: function() { 
    if (this.func) { 
     this.callFunc = new Function('return '+ this.func); 
     this.callFunc(); // can now be called here or elsewhere in the Polymer object 
    } 
}); 

तो चाल यह है कि "foo()" एक स्ट्रिंग है जब आप इसे पहले पॉलिमर तत्व में पास करते हैं। मैंने थोड़ी देर के लिए इसके साथ भी लड़ा और यह एकमात्र तरीका है जिसे मैं इसे पूरा करने के लिए पा सकता हूं। यह समाधान एक फ़ंक्शन बनाता है जो आपके फ़ंक्शन कॉल को लौटाता है, जिसे आप अपने बहुलक तत्व गुणों में से किसी एक के मान के रूप में असाइन करते हैं।

कुछ लोग कह सकते हैं कि आपको फ़ंक्शन कन्स्ट्रक्टर का उपयोग नहीं करना चाहिए क्योंकि यह eval() और .... जैसा कि आप जानते हैं, पूरी 'eval बुराई' चीज है। लेकिन अगर आप इसे किसी अन्य फ़ंक्शन पर कॉल करने के लिए उपयोग कर रहे हैं और आप दायरे के प्रभाव को समझते हैं तो मुझे लगता है कि यह एक उचित उपयोग-मामला हो सकता है। अगर मैं गलत हूं तो मुझे यकीन है कि कोई हमें बताएगा! https://stackoverflow.com/a/4599946/2629361

अन्त में, मैं पर हो 'संलग्न' जीवन चक्र घटना में रखते:

यहाँ एक अच्छा करने के लिए एक लिंक अतः मामले में() eval के बीच मतभेद और समारोह निर्माता के बारे में जवाब देने के लिए यह मदद कर सकता है सुरक्षित पक्ष क्योंकि यह 'तैयार' से बाद में होता है। मुझे यकीन नहीं है कि 'संलग्न' के बजाय पहले की लाइफसाइकिल घटना या 'तैयार' का उपयोग किया जा सकता है या नहीं। शायद कोई इस जवाब को बेहतर बना सकता है और हमें बता सकता है।

+1

फ़ंक्शन कन्स्ट्रक्टर अभी भी eval() के समान ही काम करता है लेकिन कम-से-कम मुझे यकीन है कि आपका सुझाव यह है कि यह फ़ंक्शन पास करने का एकमात्र तरीका है एक विशेषता के रूप में। मैं शायद इस विचार को छोड़कर सीएसपी डिफ़ॉल्ट प्रतिबंधों और क्या नहीं कर रहा हूं। –

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