You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:01:51