我尝试使用Ember来查询一个JSON API,将数据创建为对象,然后在我的Handlebars模板中循环遍历这些对象。我能够记录响应和类别数组,并且我可以看到它们都已被创建。但是在我的模板中,我一直收到“未找到类别”的消息。
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"></script>
<script type="text/x-handlebars" data-template-name="index"></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}}
吗? - Steve H.未捕获的错误:断言失败:#each循环遍历的值必须是一个数组。您传递了(生成的索引控制器)
。 - kmmApp.Categories
中的list
方法。该方法没有返回语句,所以如果您调用它,将不会返回任何内容。 - Myslikreturn
getJSON调用。为什么从each语句中删除“category”可以解决问题?这是因为我已经在IndexRoute中设置了作用域吗? - kmmmodel
钩子中返回数组,则该数组将直接进入控制器的content
中。因此,没有category
属性。 - Myslik{{#each}}
助手中的参数是您要迭代的控制器属性。您没有控制器,因此Ember创建了一个控制器,该控制器没有名为“category”的属性。 - Steve H.