2015-04-23 130 views
0

我使用流星和引导,与nemo64:bootstrap包警报closed.bs.alert不会触发。在custom.bootstrap.json我有“警报”和“警报”。流星+引导 -

我试图捕捉closed.bs.alert事件模板事件。出于某种原因,它不会捕获。

Template.alert.events({ 
    'closed.bs.alert .alert': function() { 
     console.log('closed'); // does not trigger 
    } 
}); 

奇怪的是,close.bs.alert做工作:

Template.alert.events({ 
    'close.bs.alert .alert': function() { 
     console.log('closed'); // triggers 
    } 
}); 

而且,如果我添加通过jQuery的事件,我可以捕捉closed.bs.alert

$('.alert').on('closed.bs.alert', function() { 
    console.log('closed'); // triggers 
}); 

所以,我知道我有我的事件格式正确,我知道closed.bs.alert事件正在触发...但由于某种原因,我无法用Template.alert.events捕捉它。

任何想法?

回答

1

我一头到引导代码,发现它触发此事件:alert.js, line 50

首先,我得到了技术工作:

Templates.alert.onRendered({ 
    $('.alert').on('closed.bs.alert', function (e) { 
     console.log('closed'); // triggers =D 
    }); 
}); 

我认为问题在于这样一个事实:引导程序在触发事件之前分离警报,因此$(document).on('closed.bs.alert', '.alert')等事件无法工作。我当然不知道100%,但我怀疑Meteor的触发器也使用了非常相似的方法。

通常这会工作:

$(function() { 
    $('.alert').on('closed.bs.alert', function() { 
     console.log('closed'); // doesn't trigger 
    }); 
}); 

然而,流星抛出一个扳手到该计划,因为我加载从数据警报,它们不存在时会触发。

但是,通过在Template.my_template.onRender()中加入jQuery风格的on()似乎可以做到这一点。

此外,引导不丢的情况下,除非警报具有“变脸”类。您可以分配渐变类而不包括“过渡”模块。如果你离开它,你只是不会得到效果,但事件可以不管。

+0

这就是我也试过,但它不适合我。还有什么我需要注意的?我得到了淡入淡出的类,并且把事件处理器放在了onRendered中。我使用的是官方的twbs:bootstrap包,而不是nemo64的,但我已经验证了用于警报处理的JavaScript已加载。 – illuminaut

+0

我只是用nemo64重新创建了同样的问题:bootstrap,我可以捕获close.bs.alert事件,但不是closed.bs.alert,所以我假设问题是当事件发生时已经移除了dom元素被解雇。 – illuminaut

+0

@illuminaut确保已将“淡入淡出”类添加到元素。如果它不存在,'closed.bs.alert'类永远不会被触发。 (请参阅我链接的文件的第53行)。如果不是这样,我建议打开一个新问题,以便发布代码示例。 – samanime