从集合中拉出字符串时,如何使用 Meteor 的助手对字符串进行切片?

How can I slice a string with Meteor's helpers while pulling it from a collection?

我正在尝试显示每个博客的前 150 个字符 post,因为它们在循环中迭代。 post 显示在存档页面上,如下所示:

<ul>
  {{#each listPosts}}
    <li>
      <h4>{{postDate}}</h4>
      <a href="/blog/{{_id}}"><h1>{{postTitle}}</h1></a>
      {{#markdown}}{{postBody}}{{/markdown}}
    </li>
  {{/each}}
</ul>

像这样,postBody 被完整返回,但我想我可以在 150 个字符后分割字符串的剩余部分并显示文本的缩短版本。

Template.Blog.helpers({
  "listPosts": function() {
    return Posts.find()
  },
  "synopsis": function() {
    var string = postBody.slice(0, 150);
    return string
  }
});

我的想法是用 {{synopsis}} 替换 {{postBody}} 并呈现文本的缩短版本,但 "synopsis" 似乎无法访问集合,因为 listPosts 已完成。

如何访问 postBody 的值,对字符串进行切片,并在遍历每个列表项时注入新值?

您应该有权访问适当的数据上下文。因此,如果 listPosts 对象具有 postBody 属性,您可以通过 this.postBody:

访问 postBody
Template.Blog.helpers({
  "listPosts": function() {
    return Posts.find();
  },
  "synopsis": function() {
    var string = this.postBody.slice(0, 150);
    return string;
  }
});

如果您只是显示数据,您可以创建一个车把助手:

Template.Blog.helpers({
  "listPosts": function() {
    return Posts.find();
  },
  "first150": function(postBody) {
    return postBody.slice(0, 150);
  }
});

并在您的模板中

<ul>
  {{#each listPosts}}
    <li>
      <h4>{{postDate}}</h4>
      <a href="/blog/{{_id}}"><h1>{{postTitle}}</h1></a>
      {{#markdown}}{{first150 postBody}}{{/markdown}}
    </li>
  {{/each}}
</ul>