【问题标题】:How to JSON.parse data in a Meteor template?如何 JSON.parse Meteor 模板中的数据?
【发布时间】:2013-08-24 16:38:48
【问题描述】:

这是我的场景,Meteor 的第一个项目:我的 MongoDB 文档中嵌入了 JSON 字符串化数据,您可以在下面的 MESSAGE 键中看到:

{ "DATE" : "Jan 24 23:28:14",
  "MESSAGE" : **"{\"status_code\":200,\"uri\":\"172.16.156.143/content/dynamic\",\"tprocess\":3}"**,
  "_id" : ObjectId("5101c3992a1624e726000014") }

在 Meteor 中,我的客户端模板代码类似于以下基本模式:

Template.log.logEntry = function () {
    return Messages.find({});
};

... 工作正常,但它显然会呈现以下模板...

<template name="log">
    <h1>Log Entries Are:</h1>
        {{#each logEntry}}
            <div> : {{MESSAGE}} </div>
        {{/each}}
</template>

... 在浏览器中使用未解析的文字字符串,例如,

{"status_code":200,"uri":"172.16.156.143/static/style.css","tprocess":2}

我很想 JSON.parse() 这个字符串并做更多有趣的事情,但我不确定如何从 Meteor 项目的 JavaScript 文件中的 isClient 上下文中最好地做到这一点。

【问题讨论】:

  • 我注意到你里面有一个 ObjectID,值得注意的是你还不能在流星中使用它。它在路线图上:trello.com/board/meteor-roadmap/508721606e02bb9d570016ae
  • 谢谢,很高兴知道这一点。到目前为止,我真正关心的是 MESSAGE 字段,因此它不会干扰我正在尝试的功能。

标签: meteor


【解决方案1】:

添加模板助手:

Template.log.aSpecificField = function () {
  return JSON.parse(this.MESSAGE).aSpecificField;
}

这允许您在 #each 循环中使用 {{aSpecificField}}

【讨论】:

  • 不明白,为什么aSpecificField会调用自己?
  • 我删除了我的第一条评论:我看到这是我在上面发布的方法的另一种方法,在模板助手上花时间使用流星文档后它确实会起作用。谢谢,除非有任何其他更适合的想法,否则将接受此作为答案。
  • @CarlosBarcelona:“aSpecificField”属性就是您要提取的字段,例如。 Template.log.uri = function(...)
【解决方案2】:

我不确定这是否是最好的方法(确实,我怀疑不是),但这可以按预期工作。

Template.log.helpers({
  get_uri: function () {
     return JSON.parse(this.MESSAGE).uri;
}

在模板中调用它现在只是:

{{ get_uri }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多