我记得在某处读到Meteor中关于Session变量的一个好处是,当你更改了Session变量时,你在Session.get中使用该变量的任何地方都会对新值做出反应。我有一个表单,如果用户取消添加新记录,我将该Session变量设置回集合中的最后一个文档,在我的情况下为#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>
Session变量以单独的导航形式Session.set('trx_DB_currentID', trx_DB_currentID)
这是获取该文档的值的原因;
Template.transactions.currentVal = function() {
var currValues = {trx_num: '', trx_amount: '''};
var trxCursor = trx.find({"_id": Session.get('trx_DB_currentID')});
trxCursor.forEach( function(rec) {
currValues.trx_num = trx.find({"userID": Meteor.userId()}).count();
currValues.trx_amount = rec.trx_amount;
});
var array = [];
array[0] = currValues;
return array;
};
到目前为止,一切都运行良好。这是单击取消按钮的事件;
'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_DB_currentID
设置为记录#2做出反应?