Я использую Meteor v0.9.1.1
для заполнения небольшого приложения мгновенного сообщения. Это мой chat_box
шаблон:Meteor - Как узнать, полностью ли загружены данные в шаблон
<ul>
{{#each messages}}
<li class="msgLine">
<strong style="color: {{userTextColor userId}}">
{{userEmail}}
</strong>
{{userMsg}}
<span>
{{createdAt}}
</span>
</li>
</ul>
То, что я хочу сделать то, что, когда пользователь должен открыть этот шаблон, последняя строка сообщения будет сфокусировано. Поэтому я делаю это, используя:
Template.chat_box.rendered = function(){
var $chat = $(".chatBox"); // get the div contains the messages list
$chat.scrollTop($chat.height());
};
Но это не сработало. Пошаговое отладка, я обнаружил, что функция Template.chat_box.rendered
запускает после инициализации DOM, а не когда все сообщения загружаются с сервера.
Итак, вопрос в том, как узнать, когда все сообщения полностью загружены в шаблон, так что после этого я смогу правильно выполнить $chat.scrollTop($chat.height());
.
Это, как я получаю список сообщений через публикации/подписки:
Meteor.subscribe('rooms_by_id', this.params._id);
var currentRoomInfo = Rooms.find().fetch()[0];
if (currentRoomInfo) {
Meteor.subscribe('messages_by_room', this.params._id);
var _messages = Messages.find().fetch();
if (_messages){
return {
roomId: currentRoomInfo._id,
roomTitle: currentRoomInfo.title.toUpperCase(),
messages: _messages
}
}
}
Я stucked этой проблемой в течение нескольких часов. Любая помощь будет очень оценена. Спасибо, ребята, продвинутые!
Приятный трюк! Спасибо за ваш ответ :) – sonlexqt
Действительно ли это единственный способ сделать это? Я бы подумал, что Метеор будет лучше, например. var my_data = Meteor.subscribe ('my_collection'); if (my_data) {... данные загружены, так что сделайте что-то ...} – JoeTidee