使用setTimeout时不保存流星集合

时间:2015-01-27 02:14:32

标签: javascript jquery meteor

我有一个事件可以在输入中保存contenteditable区域:

Template.documentPage.helpers({
  contenteditable: function() {
    return '<div class="content" contenteditable="true">' + this.content + '</div>' // hack to avoid Blaze's code duplication bug in contenteditable elements
  } 
}) 

Template.documentPage.events({
  'input .content': function(e) {
    var savedSel = rangy.saveSelection()
    var document = $(e.target).html()

    setTimeout(function(){ 
      Documents.update(this._id, {$set: {content: document}}, function(){
        rangy.restoreSelection(savedSel)
        console.log('saved')
      })
    }, 3000)

模板:

<template name="documentPage">
  <div class="editor">
    <input class="title" type="text" value="{{title}}">
    {{{contenteditable}}}
  </div>
</template>

我确实在控制台中看到saved,但contenteditable div中的内容未保存。删除setTimeout后,该集合会保存。

修改

我尝试了Meteor.setTimeOut,而Session也没有效果:

'input .content': function(e) {
    Meteor.setTimeout(function(){
      Session.set('ready', true)
    }, 3000)

    Tracker.autorun(function(){
     if(Session.get('ready')){
      var savedSel = rangy.saveSelection()
      var document = $(e.target).html()
      console.log(document)
      Documents.update(this._id, {$set: {content: document}}, function(){
        rangy.restoreSelection(savedSel)
        console.log('saved')
        Session.set('ready', false)
      })
     }
    })

1 个答案:

答案 0 :(得分:1)

在试图解决它大约30分钟之后,我最终做到了这一点。

事件内的

Template.example.events({
 Session.set('idExample',this._id);
Meteor.setTimeout(function(){
      Session.set('ready',true)
    },5000)
})

在某些Tracker.autorun(function(){})

之外
Tracker.autorun(function(){
if(Session.get('ready')){
  Documents.update(Session.get('idExample'), {$set: {content: document}}, function(){
    rangy.restoreSelection(savedSel)
    console.log('saved')
  })
}
});