困境:
- 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
}
}
}
通过创建和更改模板以包含单个消息来交换呈现,使该函数为每条新消息运行一次。这意味着它为 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
}
关于javascript - meteor :oncreated 与 onrendered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29284222/