相当于jQuery在Ractive.js事件代理中的$(this)

时间:2015-03-28 16:37:30

标签: javascript jquery ractivejs

我正在阅读有关Ractive.js事件代理here

我现在想用Ractive.js中的事件代理替换click事件(当前用jQuery编写)。这是当前的代码:

$('.filter-close').click(function(){
    $(this).parent().hide();
});

HTML位很简单:

<a on-click="closeFilter" class="filter-close">close</a>

我知道如何在Ractive.js中创建代理:

ractive.on( 'closeFilter', function ( event ) {
  //code here
});

如果我在那里发出警报,它会在点击时正确执行。

我遇到的问题是,如何访问元素本身。在上面的示例中,我需要隐藏单击元素的父级。在jQuery中,我使用$(this)来查找元素。我如何在Ractive中做同样的事情?

this返回整个ractive对象,$(this)抛出错误,并且我认为,通过ID获取元素会破坏首先使用Ractive的目的。

我也知道有可能将事件与事件一起传递,例如on-click="closeFilter:{{arg}}",但在这种情况下不知道arg应该是什么(或者如果是正确的做法)。

有人能指出我在正确的方向吗?

2 个答案:

答案 0 :(得分:2)

event.node可以访问DOM元素

ractive.on( 'activate', function ( event ) {
  // event.node will be the button (will be <button on-click='activate'>Activate!</button>)
});

要访问父节点,您可以执行event.node.parentNode

如果您的网页上有jquery,那么您可以轻松地执行$(event.node.parentNode).hide();

答案 1 :(得分:2)

所以,你在event.node之后,然后在Javascript中访问父节点并隐藏它,如下所示。

ractive.on( 'activate', function ( event ) {
    event.node.parentNode.style.display = 'none';
}