<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 के बीच मतभेद और समारोह निर्माता के बारे में जवाब देने के लिए यह मदद कर सकता है सुरक्षित पक्ष क्योंकि यह 'तैयार' से बाद में होता है। मुझे यकीन नहीं है कि 'संलग्न' के बजाय पहले की लाइफसाइकिल घटना या 'तैयार' का उपयोग किया जा सकता है या नहीं। शायद कोई इस जवाब को बेहतर बना सकता है और हमें बता सकता है।
तो आपका मूल तत्व फ़ंक्शन 'foo' को परिभाषित करता है और आपके बच्चे तत्व (' foo-bar') इसे कॉल करने का प्रयास कर रहा है? –
@BenThomas यह सिर्फ एक विशेषता मान के रूप में एक समारोह गुजर रहा है। हम बस सादगी के लिए मान लेंगे कि HTML दस्तावेज़ में ऐसा दिखाई देता है। इस मामले में कोई मूल तत्व नहीं है। –
[यहां इस प्रश्न के अधिक जवाब हैं] (https://stackoverflow.com/q/31441401/1640892)। ... https://stackoverflow.com/q/31441401/1640892 – Mowzer