【发布时间】:2014-04-03 22:08:57
【问题描述】:
我正在尝试使用 Ember 查询 JSON API,从数据中创建对象,然后遍历我的 Handlebars 模板中的对象。我能够记录response 和categories 数组,并且我看到它们都被创建了。我的模板中不断出现“未找到类别”。
app.js:
App = Ember.Application.create({
LOG_TRANSITIONS: true
});
App.Category = Ember.Object.extend();
App.Category.reopenClass({
list: function() {
$.getJSON("/api_url").then(function(response) {
var categories = [];
for(var i = 0; i < response.length; i++) {
// create a Category with a "name" property
categories.push(App.Category.create({ name: response[i]}));
}
// see screenshot for what this looks like logged to console
return categories;
});
}
});
App.IndexRoute = Ember.Route.extend({
model: function() {
return App.Category.list();
}
});
index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>My App</title>
</head>
<body>
<script type="text/x-handlebars" data-template-name="application">
<h1>My App</h1>
<div class="content">
{{outlet}}
</div>
</script>
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each category}}
<li>Name: {{name}}</li>
{{else}}
<li>No categories found</li>
{{/each}}
</ul>
</script>
<script src="/kory/js/libs/jquery-1.10.2.js"></script>
<script src="/kory/js/libs/handlebars-1.1.2.js"></script>
<script src="/kory/js/libs/ember-1.5.0.js"></script>
<script src="/kory/js/app.js"></script>
</body>
</html>
JSON 响应示例:
[
"Foo",
"Bar",
"Meow",
"Woof"
]
记录的categories 数组的屏幕截图:
【问题讨论】:
-
在您的模板中,您是否尝试过简单地使用
{{#each}}而不是{{#each category}}? -
刚试过,我收到了这个错误:
Uncaught Error: Assertion Failed: The value that #each loops over must be an Array. You passed (generated index controller) -
检查
App.Categories中的list方法。此方法没有返回语句,因此如果您调用它,则不会返回任何内容。 -
@Myslik 你是对的,我不得不
returngetJSON 调用。为什么从每个语句中删除“类别”会修复它?是因为我已经在我的 IndexRoute 中设置了范围吗? -
@kmm 正如你所说。如果您在路由中的
model钩子中返回数组,则数组将直接到达控制器的content。所以没有category属性。
标签: javascript arrays json ember.js handlebars.js