未能触发Session变量和Collection的反应上下文

时间:2012-12-18 04:32:25

标签: javascript meteor

我有一个small project,右边有一个电路板列表,左边有一个活动板:

var updateBoard = function (b) {
  Boards.update(b._id, b)
  Session.set("active-board-id", b._id)
}

Template.controls.boards = function() {
  return Boards.find()
}

Template.controls.events({
  'click .board' : function (evt) {
    updateBoard(this)
  }
})

Template.board.b = function() {
  var b = Boards.findOne(Session.get('active-board-id'))
  return b || Boards.findOne()
}

Template.board.events({
  'click .cell': function (evt) {
    this.value += 1
  },
  'click .board': function (evt) {
    updateBoard(this)
  },
})

当您单击电路板中的单元格时,它应该递增。集合中的底层板增量(通过单击另一块板然后返回第一块板可以看到),但可见板不会增加。

我已经尝试将电路板直接存储在会话变量中并返回它。当我这样做时,可见电路板会递增,但其他选项卡中的电路板不会随之增加。我正在寻找一种解决方案,使所有选项卡中的所有观看者都能立即看到对活动板的编辑。

1 个答案:

答案 0 :(得分:1)

数字我会在发布问题后立即解决。显然findOne未正确注册,切换到find解决问题。

Template.board.b = function() {
  var b = Boards.find(Session.get('active-board-id')).fetch()[0]
  //var b = Boards.findOne(Session.get('active-board-id'))
  return b || Boards.findOne()
}

更新:这是开发火车上大约一天的错误。事实证明我的时机很好; - )