[英]Meteor: oncreated vs 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
}
}
}
通过创建和更改模板呈现的交换包含单个消息,使该函数对每个新消息运行一次。 这意味着它需要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
}
}
老实说你不能在“渲染”中做这样的事情。 或者,在将额外的内容渲染到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函数中来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.