2013-07-23 3 views
9

यदि मेरे पास स्ट्रिंग में कोई विधि नाम है, तो रूबी में मैं गतिशील रूप से प्रेषण विधियों के लिए send का उपयोग कर सकता हूं, उदा।क्या रूबी के भेजने के लिए जावास्क्रिप्ट/कॉफ़ीस्क्रिप्ट/jQuery में समतुल्य है?

method_name = "delete" 
send method_name 

मैं भी प्रक्षेप का लाभ ले सकते:

method_name = "add" 
send "#{method_name}_task", args 

2 कार्यों जावास्क्रिप्ट में परिभाषित किया गया, एक को हटाने के लिए, एक है कुछ अद्यतन करने के लिए। प्रत्येक के लिए एक बटन गतिशील रूप से जोड़ा गया है और, फिलहाल, हटाएं विधि button.on "click" के माध्यम से बाध्य हो जाती है, उदा।

b.on "click", (event) -> 
    event.preventDefault() # stop submission via postback 
    this_button = $(this) 
    task_id = this_button.data("task-id") 
    delete_task(task_id, this_button) 
    false 

मैं यह करने के लिए सक्षम होने के लिए करना चाहते हैं:

method_name = "delete" 
b.on "click", (event) -> 
    event.preventDefault() # stop submission via postback 
    this_button = $(this) 
    task_id = this_button.data("task-id") 
    send "#{method_name}_task", task_id, this_button 
    false 

2 कार्यों के बंधन के बीच फर्क सिर्फ इतना है कि यह एक पंक्ति है। यदि कोई स्पष्ट तरीका है, तो पुनरावृत्ति पर कटौती करने में मददगार होगा। मुझे अपनी खोजों में कुछ भी नहीं मिला है, इसलिए अगर कोई मदद कर सकता है तो इसकी बहुत सराहना की जाएगी।

+0

आप कॉफ़ीस्क्रिप्ट कोड में क्या भेज रहे हैं? रूबी उदाहरणों में आपके पास 'obj' है। – Esailija

+0

@Esailija क्षमा करें अगर यह स्पष्ट नहीं था, तो मैं जावास्क्रिप्ट में किसी ऑब्जेक्ट का उपयोग नहीं कर रहा हूं। रूबी स्वचालित रूप से स्वयं का उपयोग करता है, इसलिए उदाहरण में कोई वस्तु की आवश्यकता नहीं है, मैंने सोचा कि यह स्पष्ट होगा। मैं इसे बदल दूंगा, धन्यवाद। – iain

+0

"रूबी स्वचालित रूप से स्वयं का उपयोग करता है _if कोई रिसीवर स्पष्ट रूप से दिया गया है_" मुझे ऊपर लिखा जाना चाहिए था। – iain

उत्तर

2

यदि आपकी विधि को वैश्विक दायरे में परिभाषित किया गया था, उदा।

var method_name = "func_delete"; 
window[method_name](arg1, arg2); 

नहीं तो आप एक ही तरह से कस्टम वस्तु गुणों का उपयोग हो सकता है::

function func_delete(arg1, arg2) { 
    // ... 
} 

सिर्फ वर्ग कोष्ठक संकेतन का उपयोग

var methods = { 
    func_delete: function() { ... } 
}; 

methods[method_name](); 
10
method_name = "delete" 
obj.send method_name 

ऐसा लगता है कि जावास्क्रिप्ट में इस तरह होगा:

methodName = "delete"; 
obj[methodName](); 

तुम हमेशा obj हालांकि जरूरत है, इसलिए यदि माणिक में send method_nameself.send method_name रूप में ही है, तो आप this[methodName]() उपयोग कर सकते हैं।

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