javascript - meteor :oncreated 与 onrendered

标签 javascript meteor dynamic-arrays

困境:

  • 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/

相关文章:

javascript - 搜索对象数组,对象的属性未定义?

c++ - 释放动态内存时 Visual Studio 中的堆损坏错误

javascript - Chrome 内容脚本

javascript - 由 laravel 发送的数组在我从 javascript 使用它时变得向后

javascript - 使用 Angular JS 从 Amazon S3 私有(private)存储桶检索图像

meteor :当我尝试将 meteor 更新到版本 1.5.1 时,带有关于 `accounts-base` 的大气包的依赖 hell

javascript警报功能奇怪的行为

node.js - mup 部署时 buffer.js Node 错误 - 我如何撤消 ` sudo ln -sf/usr/local/n/versions/node/<VERSION>/bin/node/usr/bin/node `

meteor - 我可以在Meteor中对方法进行分组吗?

arrays - 快速创建动态大小数组