我想知道是否有任何方法可以知道#each循環是否「準備就緒」。 「準備就緒」是指它呈現所有節點並插入到DOM中。我什至不說onRendered
回調(舊rendered
)。我試過流星#每個循環準備好
<template name="myTemplate">
<div class="some-class">
{{#if Template.subscriptionsReady}}
{{#each messages}}
<div>{{text}}</div>
{{/each}}
<script>
$(".some-class").trigger("LOOP_READY")
</script>
{{/if}}
</div>
</template>
Template.myTemplate.onRendered(function(){
this.$(".some-class").on("LOOP_READY", doSomething)
})
但它也不管用。我不想使用計時器。
UPDATE
messages
是文字信息的集合,用於當前對話,dialogId
是存儲在Session
反應變種。
Template.myTemplate.onCreated(function(){
var self = this;
self.autorun(function(){
self.subscribe("messages", Session.get("dialogId"))
})
})
因此,如果有人改變dialogId,MyTemplate的加載另一個對話框中的消息,我想知道這個消息是準備好了,滾動到一個特定的消息。簡單的onReady
不起作用,因爲在所有消息被渲染並獲得它自己的高度之前,我無法準確地調用scrollTop。
你確定'用'waitOn一起onRendered' '(看鐵路路由器)或類似的不工作?我可以想象,您看到的觸發器是從模板第一次渲染時開始的,即沒有數據可用時。我懷疑你希望只有當數據到達並且所有'每個'都已經渲染時纔會觸發它。你是否在等待數據? –
@ZuzEL你能解釋你爲什麼要這樣嗎?你需要初始化一個插件什麼的? –
我想,如果我得到你想要的,那麼你的scrollToTop在添加新元素之前就開始了。所以從技術上講,如果你只是在setTimeout(func,0)中調用scrollToTop,那麼當你調用scroll時會更新元素的高度。 –