每次提交或删除单词时,我都会尝试重新呈现列中的单词集合。它会在删除单词时重新呈现,但在提交单词时不会重新呈现。
这是我的模板:
<template name = "wordColumn">
{{#each words}}
<button class = "label label-default" draggable="true">
{{word}}
</button>
{{/each}}
</template>
这是我的帮手:
Template.wordColumn.helpers ( {
words: function () {
var words;
var wordIds = Session.get ( "wordIds" );
words = Words.find( { '_id': { $in: wordIds } }, { sort: { createdAt: -1 } } );
return words;
},
} )
这里是模板事件中的提交代码。当我执行Words.find()时,很明显底层数据库已经改变,因此上面的Words.find()应该是被动的并自动更新列:
"submit .new-word": function ( e ) {
var text = e.target.word.value;
Meteor.call ( "addWord" , text, function ( err, data ) {
Session.set ( "displayInMainBox", Words.find( data ).fetch()[0] );
} );
e.target.word.value = "";
return false;
}
然而,没有雪茄 - 我刚才提交的这个词并没有自动显示,除非我刷新页面。
您可以在此处查看已部署的应用:contextual.meteor.com,并提交一个新单词。它将显示在主框中,但不会显示在右侧的所有单词列表中。
答案 0 :(得分:1)
您需要在该回调中的某个位置Session.set( "wordIds"...
。如果这没有改变,你帮助器中的光标就不会改变。由于您当前的光标包含所有当前文档,因此当您删除某些内容时,它会做出反应。
PS,尝试一起取消会话var。如果可能,处理订阅中的逻辑(或者从应用程序的外观中解决所有逻辑)。