微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何防止Meteor.js模板无需数据渲染

有人可以帮我理解Meteors模板的行为吗?

我想在我的项目中实现一个通知系统,类似于Apples Growl.
当记录写入数据库时​​,它使用简单的jQuery效果显示消息.我简化了代码示例,以显示基本问题:

代码

var Messages = new Meteor.Collection("messages");

if (Meteor.isClient) {
   Template.Notification.Message = function() {
     return Message.findOne({}, {sort: {seq: -1}});
   };

   Template.Notification.rendered = function() {
    $("#livebar").fadeIn(400).delay(1000).fadeOut(400);
   }
}

模板:

<template name="Notification">
<div class="row">
   <div class="span6 alert alert-error" id="livebar" style="display:none;">
        {{Messages.text}}
   </div>
</div>
</template>

如果呈现页面,则使用jQuery效果呈现空的不可见区域,然后系统加载反应数据源(Message)并再次呈现该区域!
我试图阻止它渲染两次,但没有成功.错误似乎很容易解决,但我被困在这里.我将不胜感激任何帮助!

解决方法:

您可以围绕模板调用{{>通知}}带有{{#if}}块.

{{#if has_notifications}}
  {{> Notifications}}
{{/if}}

//JS
Template.foo.has_notifications = function() {
  Message.find().count() > 0;
}    

但是,由于数据不是一个整体,因此可能会发生模板多次渲染.超时可以帮助你…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐