如何使用 on-tap='node_action' 触发元素的点击事件?
How to trigger a tap event for element with on-tap='node_action'?
通常我可以使用 fire
来激活处理程序,但在这种情况下,我需要在事件处理程序中使用 e.context
获取完整的项目数据。
更新 08.05.15
详细说明
为什么我不能开火 node_action
?
我有一个项目列表,点击后我想在项目附近的浮动块中显示项目相关信息。
所以我有每个项目 on-tap='node_action'
并且我有:
@on 'node_action', (e)->
item = e.context — then I can use item.id to load data
item_div = e.node — then I can use item_div.top_y() to show floating menu
on the same level on the page with the item div
为什么需要触发?
如果我想在那个浮动菜单上工作,我不想每次在页面刷新后都手动单击项目,所以我通常使用触发事件来自动执行它。
是的,我可以在这里用准备好的事件开火,比如
e =
context: ractive.get 'items.0'
node: ractive.find '.items .line:first'
ractive.fire('node_action', e)
但是可以对列表中的项目进行排序、筛选和更改。
理想情况下,有这样的东西会很好:
ractive.find('.items .line:first').tap()
或
ractive.find('.items .line:first').trigger 'tap'
或者也许
ractive.find('.items .line:first').fire 'node_action'
在响应式应用程序中,当您想要获取 DOM 节点来获取数据时,通常表示出现了问题。但没有更多细节很难说。
为了回答我认为是你的问题,你可以使用以下方法从节点获取上下文、键路径和索引,类似于你从事件上下文中获取的内容:
var info = Ractive.getNodeInfo(node);
终于发现 Rich Harris 的 Simulant.js 实际上是可行的。
它不支持 tap
事件,因此根据我的需要,我添加了一个小的 jQuery 插件
# Ractive trigger
# btn.r_trigger 'tap'
# btn.r_trigger 'click', {button:1, which:2}
$.fn.r_trigger = (event_name, opt)->
el = @[0]
switch event_name
when 'tap'
simulant.fire(el, 'mousedown', opt)
simulant.fire(el, 'click', opt)
else
simulant.fire(el, event_name, opt)
通常我可以使用 fire
来激活处理程序,但在这种情况下,我需要在事件处理程序中使用 e.context
获取完整的项目数据。
更新 08.05.15
详细说明
为什么我不能开火 node_action
?
我有一个项目列表,点击后我想在项目附近的浮动块中显示项目相关信息。
所以我有每个项目 on-tap='node_action'
并且我有:
@on 'node_action', (e)->
item = e.context — then I can use item.id to load data
item_div = e.node — then I can use item_div.top_y() to show floating menu
on the same level on the page with the item div
为什么需要触发?
如果我想在那个浮动菜单上工作,我不想每次在页面刷新后都手动单击项目,所以我通常使用触发事件来自动执行它。
是的,我可以在这里用准备好的事件开火,比如
e =
context: ractive.get 'items.0'
node: ractive.find '.items .line:first'
ractive.fire('node_action', e)
但是可以对列表中的项目进行排序、筛选和更改。
理想情况下,有这样的东西会很好:
ractive.find('.items .line:first').tap()
或
ractive.find('.items .line:first').trigger 'tap'
或者也许
ractive.find('.items .line:first').fire 'node_action'
在响应式应用程序中,当您想要获取 DOM 节点来获取数据时,通常表示出现了问题。但没有更多细节很难说。
为了回答我认为是你的问题,你可以使用以下方法从节点获取上下文、键路径和索引,类似于你从事件上下文中获取的内容:
var info = Ractive.getNodeInfo(node);
终于发现 Rich Harris 的 Simulant.js 实际上是可行的。
它不支持 tap
事件,因此根据我的需要,我添加了一个小的 jQuery 插件
# Ractive trigger
# btn.r_trigger 'tap'
# btn.r_trigger 'click', {button:1, which:2}
$.fn.r_trigger = (event_name, opt)->
el = @[0]
switch event_name
when 'tap'
simulant.fire(el, 'mousedown', opt)
simulant.fire(el, 'click', opt)
else
simulant.fire(el, event_name, opt)