使工具在流星中反应性



我正在使用Bootstrap自己的工具提示,这需要一些初始化。有人告诉我这样做:

Template.myTemplate.rendered = function() {
        $('.tooltipped').tooltip()
}

然后,我可以通过添加类tooltipped和一些data -TAG来添加工具提示,在此字体上很棒的图标:

<i class="tooltipped fa fa-square" data-toggle="tooltip" data-placement="top" title="Whatever the tooltip should say"></i>

问题在于,这些图标在项目被动态添加时产生,并且有些东西使工具提示无法处理新鲜物品。它需要完整的页面重新加载才能使它们正常工作。

谷歌搜索我找到了两个假定的解决方案的问题,这些解决方案都无法正常工作。

第一个解决方案是将初始化代码包装在Meteor.defer()函数中,我没有经验,甚至没有出现在官方文档中。

Template.myTemplate.rendered = function() {
    Meteor.defer(function() {
        $('.tooltipped').tooltip()
    })
}

但是,这似乎没有做任何事情。

第二个解决方案根本不是真正的解决方案,而只是建议放弃Bootstrap的工具提示和安装 beackback:tooltips ,但这不是一个非常愉快的体验根本(复杂和非工作)。

所以我剩下的引导性和无反应性。有人知道如何使其正常工作吗?

,所以这不起作用...

<template name="myTemplate">
  {{#each myTemplateItems}}
    <i class="tooltipped fa fa-square" data-toggle="tooltip" data-placement="top" title="{{whateverTheTooltipShoudSay}}"></i>
  {{/each}}
</template>
Template.myTemplate.onRendered(function() {
  $('.tooltipped').tooltip()
})

当将项目添加到myTemplateItems时,onRendered回调不会触发。这是因为myTemplate已经渲染了。

这应该有效:

<template name="myTemplate">
  {{#each myTemplateItems}}
    {{>myTemplateItem}}
  {{/each}}
</template>
<template name="myTemplateItem">
  <i class="tooltipped fa fa-square" data-toggle="tooltip" data-placement="top" title="{{whateverTheTooltipShoudSay}}"></i>
</template>
Template.myTemplateItem.onRendered(function() {
  this.$('.tooltipped').tooltip();
})

当将新项目添加到myTemplateItems时,创建了myTemplateItem的新模板实例,您可以在。

上调用 onRendered

您可以简单地在title属性中使用助手。例如,如果您使用默认应用流星在meteor create中创建,则可以写:

<i class="tooltipped fa fa-square" data-toggle="tooltip" data-placement="top"
   title="{{counter}}"> the text with the tooltip </i>

您将看到单击计数器按钮时工具提示的变化。这是使用Session变量,这是反应数据源的完美示例。但是其他反应性数据源应该可以使用相同,例如,在集合上查询。

警告:我不知道如果用户用工具提示将项目悬停,即在这种情况下,工具提示可能不会更新,直到用户将鼠标移开然后再次悬停。

我使用的另一个解决方案是,当您的模板中的更改被按钮/事件触发时,您可以在事件处理程序中以编程方式销毁和重新定位工具提示。如果您具有基于数据中某些条件的不同工具提示/禁用设置的同一按钮的不同版本,则此功能非常有效。

您的模板:

{{#unless exceededCapacity}}
    <a href="" id="addItemButton" class="add-item" data-toggle="tooltip" data-placement="top" title="" data-original-title="Click here to add items.">Add Item</a>
{{else}}
    <a href="" id="addItemButton" class="add-item" data-toggle="tooltip" data-placement="top" title="" data-original-title="You cannot add any more items." disabled>Add Item</a>
{{/unless}}

然后您的事件代码:

'click .add-item': function(event) {
    event.preventDefault();  
    //  Destroy the tooltips
    $('.add-item').tooltip('destroy');
    //  Code to do your work... e.g insert time
    //  Reinitialize tooltips - this could also be called in an insert callback upon success, etc.
    $('.add-item').tooltip({trigger: 'hover'});
}

最新更新