我正在阅读有关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
应该是什么(或者如果是正确的做法)。
有人能指出我在正确的方向吗?
答案 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';
}