Ruby的发送中是否有Javascript/Coffeescript/jQuery中的等价物?

iai*_*ain 9 javascript ruby jquery metaprogramming coffeescript

如果我在字符串中有一个方法名称,在Ruby中我可以send用来动态调度方法,例如

method_name = "delete"
send method_name
Run Code Online (Sandbox Code Playgroud)

我也可以利用插值:

method_name = "add"
send "#{method_name}_task", args
Run Code Online (Sandbox Code Playgroud)

我在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
Run Code Online (Sandbox Code Playgroud)

我希望能够这样做:

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
Run Code Online (Sandbox Code Playgroud)

两个函数的绑定之间的唯一区别是这一行.如果有一个明显的方法,减少重复是有帮助的.我的搜索中没有找到任何内容,所以如果有人能提供帮助,我将不胜感激.

Esa*_*ija 10

method_name = "delete"
obj.send method_name
Run Code Online (Sandbox Code Playgroud)

看起来在Javascript中会是这样的:

methodName = "delete";
obj[methodName]();
Run Code Online (Sandbox Code Playgroud)

你总是需要这个obj,所以如果在红宝石中send method_name是相同的self.send method_name,那么你可以使用this[methodName]().


Kon*_*udy 7

您需要使用括号表示法

 b.on("click", window[method_name](event))
Run Code Online (Sandbox Code Playgroud)