您好,我正在学习Ember.js,我正在连接到我通过Wordpress JSON API插件控制的Wordpress网站。
使用插件中的JSON API,我可以轻松地为任何帖子提取WordPress帖子标题,作者姓名,发布日期,发布摘录等等。但是,当我尝试使用帖子内容时,我会返回 [object Object] 而不是预期的字符串。
直接查看我正在使用的JSON对象,摘录和内容都是JSON对象中的项目,每个项目都等于一个HTML字符串。两者之间的唯一区别似乎是字符串的长度。使用{{{excerpt}}}
返回字符串并允许HTML格式正确,而{{{content}}}
只打印出'[object Object]'。
<script type="text/x-handlebars" id="post">
<div class="post">
<h1>{{title}}</h1>
<h2>by {{author.name}} <small class="muted">({{date}})</small></h2>
<hr>
<div class="below-the-fold">
{{{content}}}
</div>
</div>
<div class="post">
<h1>Sample Post</h1>
<h2>by Boydbme <small class="muted">(2015-01-10 11:32:36)</small></h2>
<hr>
<div class="below-the-fold">
[object Object]
</div>
</div>
post: {
id: 1306,
type: "post",
slug: "sample-post",
url: "#removed_for_stack_overflow",
status: "publish",
title: "Sample Post",
title_plain: "Sample Post",
content: "<p class="p1"><span class="s1">Lorem harum fuga.</span></p> <p class="p1"><span class="s1">Lorem dolor fuga.</span></p> <p class="p1"><span class="s1">Lorem ipsuuga.</span></p> <p class="p1"><span class="s1">Lorem dolor</span></p> <p class="p1"><span class="s1">Lorem harum fuga.</span></p>",
excerpt: "<p>Lorem ipsum dolor sit fuga.<a class="read-more" href="#removed_for_stack_overflow">Read More »</a></p> ",
date: "2015-01-10 11:32:36",
modified: "2015-01-10 11:32:36",
categories: [],
tags: [],
author: {},
comments: [],
attachments: [],
comment_count: 0,
comment_status: "closed",
thumbnail: "#removed_for_stack_overflow",
custom_fields: {},
thumbnail_size: "post-thumbnail",
thumbnail_images: {}
},
非常感谢任何帮助。我的困惑来自于能够使用{{{excerpt}}}
并按预期在模板中获取字符串,但无法对{{{content}}}
执行相同操作。
谢谢!
@rené在下面的评论中说得对。 {{{content.content}}}
解决了这个问题,因为我正在与内部对象发生冲突。
答案 0 :(得分:2)
content
用于Ember和Ember Data的一些内部内容,特别是对于Promise数组和IIRC也在DS.Model中。
在Handlebars模板中使用属性时,内部Ember会执行this.get(propName)
之类的操作。在这种特殊情况下,您的this
对象可能实际上根本没有很多属性,它只是委托给自己的content
对象:this.get('excerpt')
只需调用this.get('content').get('excerpt')
注意到当前对象上没有excerpt
属性。但是,当您要求content
时,它只会转换为this.get('content')
,其中确实,并且包含一个对象。
最有可能的是,您需要{{{content.content}}}
,但这取决于最后将哪个类实例传递给Handlebars。
您可以在Ember Handlebars中使用{{log varName}}
来调试此类问题。
答案 1 :(得分:0)
content
是一个对象,为了将JS对象呈现为HTML,它使用toString()
方法粘合到一个字符串中。在这种情况下,[object Object]
。我猜你想要JSON字符串。你需要做两件事之一。
创建一个使用JSON.stringify(this.get('post'), null, 2)
返回字符串的计算属性,或者制作一个可以执行此操作的把手助手。