Session 流星、会话值和反应性

Session 流星、会话值和反应性,session,meteor,Session,Meteor,我记得在某个地方读到过关于Meteor中会话变量的一个好处是,当您更改会话变量时,您使用该变量的Session.get的任何地方都会对新值作出反应。我有一个表单,如果用户取消添加新记录,我会将会话变量设置回集合中的最后一个文档,在我的例子中是2,但表单保留在从未添加的新记录3上 这是我的基本形式 <template name="transactions"> <form id="trx_form"> {{#each currentVal}} Trx No. <in

我记得在某个地方读到过关于Meteor中会话变量的一个好处是,当您更改会话变量时,您使用该变量的Session.get的任何地方都会对新值作出反应。我有一个表单,如果用户取消添加新记录,我会将会话变量设置回集合中的最后一个文档,在我的例子中是2,但表单保留在从未添加的新记录3上

这是我的基本形式

<template name="transactions">
<form id="trx_form">
{{#each currentVal}}
  Trx No. <input type="text" value="{{trx_num}}" id="trx_num" readonly>
  Amount: <input type="text" value="{{trx_amount}}" id="trx_amount">
  <input type="submit" value="Save" id="save_trx">
  <input type="button" value="Cancel" id="cancel_trx">
{{/each}}
</form>
</template>
到目前为止,一切正常。以下是单击“取消”按钮的事件

'click #cancel_trx': function(theEvent, theTemplate) {
// Change trx_DB_currentID to last record
var trxCursor = trx.find({"userID": Meteor.userId(), 'trx_num': trx.find({"userID": Meteor.userId()}).count()});
trxCursor.forEach( function(rec) {
    Session.set('trx_DB_currentID', rec._id);   
});
}

我可以在控制台中看到,trx_DB_currentID确实设置为记录2的id,但表单仍然显示一条空白记录3。如果我在导航表单上单击“返回一条记录”,它将显示记录1。那么为什么我的表单对trx\u DB\u currentID设置为记录2没有反应呢?

也许与您的问题无关,但我不确定我是否完全理解currentVal助手。为什么要使用forEach和一个数组作为游标,该游标将始终返回一个由_id查询的项目,这是唯一的?在我看来,findOne在那里工作得更好,您可以直接访问trxCursor.trx\u amount。此外,单击“取消trx”时总是看到1而不是2的原因似乎是您正在迭代trxCursor,即Session.set将继续覆盖上一个值,并始终返回cursor.mark中的最后一个值,在开始并取消第三条记录后,我可以看到该会话。get'trx_DB_currentID'确实包含记录2的Id,但启动的空表单仍在显示。
'click #cancel_trx': function(theEvent, theTemplate) {
// Change trx_DB_currentID to last record
var trxCursor = trx.find({"userID": Meteor.userId(), 'trx_num': trx.find({"userID": Meteor.userId()}).count()});
trxCursor.forEach( function(rec) {
    Session.set('trx_DB_currentID', rec._id);   
});
}