如果我在字符串中有方法名称,在Ruby中我可以使用send
动态分派方法,例如
method_name = "delete"
send method_name
我也可以利用插值:
method_name = "add"
send "#{method_name}_task", args
我在javascript中定义了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
两个函数的绑定之间的唯一区别是这一行。如果有一个明显的方法,减少重复是有帮助的。我的搜索中没有找到任何内容,所以如果有人能提供帮助,我将非常感激。
答案 0 :(得分:10)
method_name = "delete"
obj.send method_name
在Javascript中看起来会像这样:
methodName = "delete";
obj[methodName]();
你总是需要obj
,所以如果ruby send method_name
与self.send method_name
相同,那么你可以使用this[methodName]()
。
答案 1 :(得分:7)
您需要使用bracket notation
b.on("click", window[method_name](event))
答案 2 :(得分:2)
如果您的方法是在全球范围内定义的,例如
function func_delete(arg1, arg2) {
// ...
}
只需使用方括号表示法:
var method_name = "func_delete";
window[method_name](arg1, arg2);
否则,您可以以相同的方式使用自定义对象属性:
var methods = {
func_delete: function() { ... }
};
methods[method_name]();