我有一个在输入中保存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)
})
}
})发布于 2015-01-27 04:07:20
在试着解决它大约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')
})
}
});https://stackoverflow.com/questions/28162136
复制相似问题