通常我可以使用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'
答案 0 :(得分:0)
在反应式应用程序中,当您想要获取DOM节点以获取数据时,通常会出现问题。但没有更多的细节很难说。
要回答我认为您的问题,您可以使用以下内容从节点获取上下文,keypath和索引,类似于从事件上下文获得的内容:
var info = Ractive.getNodeInfo(node);
答案 1 :(得分:0)
最后发现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)