我有一个事件可以在输入中保存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)
})
}
})
答案 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')
})
}
});