現在、私は言及された投稿から適応されたこのコードを持っています。
Template.messages.rendered = ->
this.autorun( (c) ->
document.bottomCheck = false
if null != chatDiv and chatDiv.scrollTop + chatDiv.offsetHeight >= chatDiv.scrollHeight
document.bottomCheck = true
$("#chat-box").empty()
messageCursor = Messages.find({}, {sort: {time: 1}})
messageCursor.forEach((message) ->
makeMessage(message) // Uses jQuery to insert HTML into our page
)
Deps.afterFlush(() ->
setScrollToBottom() if document.bottomCheck
)
)
これは、新しいメッセージが届くたびに各メッセージをログに記録するのにうまく機能しています。私が混乱している部分は、HTML に適切なデータを入力する方法です。現在、テンプレート ヘルパーを呼び出してメッセージをレンダリングする次の HTML があります。
<template name="messages" class="message-style">
<div id="chat-box">
{{#each getMessages}}
<div class="chat-message" id="chat-message-scroll" style="background-color: {{backgroundColor}}">
<div class="row">
<div class="col-md-2 message-name">
<div class="chat-message-name">{{name}}</div>
</div>
<div class="col-md-8 message-contents">
<!-- <br> -->
<div class="chat-message-contents" style="color:{{textColor}}">{{{convertMsg message}}}</div>
</div>
<div class="col-md-2 message-timestamp">
<span class="chat-message-timestamp">
{{#if notSystemMsg this.type}}
{{#if isBookmarked this._id}}
<i class="fa fa-star" id='chat-full-bookmark'></i>
{{else}}
<i class="fa fa-star-o" id='chat-empty-bookmark'></i>
{{/if}}
{{/if}}
{{convertToLocalTime time}}
</span>
</div>
</div>
</div>
{{/each}}
</div>
</template>
メッセージデータを取得する新しい方法を利用するために、現在持っているものをどのように適応させることができるか知りたいです。プログラムで DOM 要素を作成して挿入するだけですか? それに関する私の問題は、ブレイズやスペースバーを使用しないため、物事を行う流星の方法のようには見えないことです.
この問題に関するヘルプをいただければ幸いです。
EDIT古いgetMessages
ヘルパー
Template.messages.getMessages = () ->
... # Random Logic
allMessages = Messages.find({}, {sort: {time: -1 }}).fetch()
... # Messing with allMessages before returning to the helper