Meteor.js从MongoDB加载Summernote内容时显示错误求助
看起来你在Meteor开发简易博客时,碰到了从数据库加载Summernote内容到模板的错误。我帮你梳理几个核心问题点和对应的修复方案:
问题排查与修复步骤
1. 模板数据上下文未正确绑定
你的view模板里写了{{{ summernote }}},但在{{#each post}}循环中调用{{> view}}时,没有把当前循环的post数据传递给模板,导致模板找不到summernote字段。
修复方案:
修改view模板,明确引用当前上下文的字段:
<template name="view"> <div> {{{ this.summernote }}} </div> </template>
或者显式传递数据给模板:
{{#each post}} {{> view postData=this}} {{/each}}
对应的view模板调整为:
<template name="view"> <div> {{{ postData.summernote }}} </div> </template>
这里用三重花括号{{{ }}}是正确的,因为Summernote生成的是HTML内容,需要不转义渲染。
2. 模板语法不完整
你提供的页面结构代码(应该是body模板?)看起来有语法缺失,{{#each post}}没有闭合标签。确保模板语法完整:
<div class="container"> {{> editor}} {{#each post}} {{> view}} {{/each}} </div>
3. Meteor数据发布订阅缺失
Meteor中客户端要获取数据库数据,必须确保服务器端发布了集合,且客户端订阅了该发布,否则客户端拿不到数据。
服务器端(main.js的Meteor.isServer块):
if (Meteor.isServer) { Meteor.publish('allPosts', function() { return Post.find(); }); }
客户端添加订阅:
if (Meteor.isClient) { // 先订阅数据 Meteor.subscribe('allPosts'); Template.body.helpers({ post: function () { return Post.find(); } }); Template.editor.onRendered(function () { // 移除多余的$(document).ready(),onRendered本身就是模板渲染完成后的回调 $('#summernote').summernote({ // 你的Summernote配置项 }); }); }
4. 确认Post集合定义正确
要确保你在共享代码(比如main.js顶层或单独的collections.js文件)中定义了Post集合,否则客户端和服务器端都无法访问:
Post = new Mongo.Collection('posts');
内容的提问来源于stack exchange,提问作者user9368003
相关产品推荐
相关产品推荐

