流星:未创建与未渲染
Meteor: oncreated vs onrendered
困境:
- oncreated:模板尚未渲染(仅激发一个每个模板的时间)
- onrendered:渲染模板(多次激发)
是否只有在模板完全渲染后才能激发函数?
我有一个消息列表,看起来与这个相似
<template name="messages">
<div id="messages">
<span class="message">{{this.message}}</span>
</div>
</template>
每次将新消息插入DOM时,我都想知道消息的文本是否包含用户名。
以下代码段运行多次,其中应该只运行一次。
Template.messages.rendered = function() {
var username = Meteor.user().services.twitter.screenName;
$("#messages").bind("DOMSubtreeModified", function() {
var lastmessage = $('.message').last().text();
if (lastmessage.indexOf(username) > -1) {
//Do something
}
}
}
由created&将模板更改为包含单个消息,会使函数为每个新消息运行一次。这意味着它为lastmessage变量取倒数第二个值:
Template.message.created = function() {
var username = Meteor.user().services.twitter.screenName;
var lastmessage = $('.message').last().text();//this is not the last message
if (lastmessage.indexOf(username) > -1) {
//Do something
}
}
老实说,你不能在"rendered"中做这样的事情吗。或者,您可以在将额外的东西呈现到DOM中之后放入一些回调。
此外,您还可以使用self.autorun(() => { if(self.alreadyRun) return; ... })
和self.alreadyRun = new ReactiveVar(false)
。
只是猜测!
var self = this;
self.alreadyRun = false;
if(self.alreadyRun){
self.alreadyRun = true;
// run once code here
}
通过将代码封装在setTimeout函数中修复了此问题。
相关文章:
- 创建nw.js+流星桌面应用程序
- 流星:未创建与未渲染
- 流星:在创建帐户上添加字段
- 如何在流星中从一个数组创建多个表行
- 在流星中创建一个传统的网络应用程序有哪些缺点
- 流星 - 创建一个复选框,用于隐藏会话中已完成的决议
- 从流星.js集合创建 CSV 文件
- 流星动态创建对象并引用它们?有没有一种简单的方法可以做到这一点
- 为望远镜流星应用程序创建数据库
- 需要帮助在Telescope流星应用程序中创建一个javascript或类似引导程序的弹出模式来提交表单
- 流星:识别客户端并将数据发送到这个特定的客户端——在其他客户端上创建块元素
- 如何在流星上创建选择过滤器
- 如何为用户创建带有构建选项的流星JS包
- 如何创建动态流星js按钮,该按钮将与渲染的任何集合同步
- 从数组javascript流星创建缓冲区
- 如何创建一个登录系统与流星
- 创建“components"流星和车把
- TypeError:无法创建属性'mapTypeId'在字符串'无法加载映射'流星错误
- 如何连接到谷歌驱动器和创建谷歌文档与流星
- 如何创建流星模板助手来检查是否相等