ボタンをクリックすると、次のように流星テンプレートを作成します。
Template.main.events({
'click input': function(event)
{
var templateInstance = Meteor.render(Template.chatfield({name:"james"}));
document.body.appendChild(templateInstance);
}
});
これにより、ユーザーからのチャット メッセージで満たされたテンプレートが作成されます。
このテンプレートで .created メソッドも使用します。
Template.chatfield.created = function()
{
var theData = this.data;
Template.chatfield.users = function()
{
return Guys.find({name:theData.name});
}
}
テンプレートの html コードは次のようになります。
<template name="chatfield">
<div id="messages">
{{#each users}}
{{#each messages}}
<p>{{this}}</p>
<br>
{{else}}
<p>No messages inner yet.</p>
{{/each}}
{{else}}
<p>No messages yet.</p>
{{/each}}
</div>
</template>
たとえば、Chrome コンソールで次のように記述するだけで、ユーザーをコレクションに追加します。
Guys.insert({name:"james",messages:["hello","world","wow","cool"]});
ボタンを押すと、希望どおりにテンプレートが表示されます。
問題は、「Guys」コレクションを更新すると(再びクロムコンソールで):
Guys.update({name:"james"},{$push:{messages:'my new message'}})
何も起こりません。ボタンをもう一度押すと、新しいメッセージが表示されます。しかし、ユーザーがメッセージを追加するとすぐに再レンダリングしたい. 私は何を間違っていますか?