我有一个ember.js原型,直到现在一直运行良好。自从我上次部署以来,我一直得到错误Uncaught TypeError:无法读取属性' hash'未定义的。
app.js文件
// Application
Welcome = Ember.Application.create({
ready : function() {
}
});
// Model
Welcome.Ticket = Ember.Object.extend({
id : null,
buyerPartyId : null,
name : null,
priority : null,
description : null,
comment : null
});
// Controller
Welcome.ticketsController = Ember.ArrayController.create({
content : [],
loadTickets : function() {
var self = this;
$.getJSON('url here', function(
data) {
for ( var i = 0; i < data.serviceRequest.length; i++) {
self.pushObject(Welcome.Ticket.create(data.serviceRequest[i]));
}
});
}
});
的index.html
<!doctype html>
<html>
<head>
<title>Ticket List</title>
<link rel="stylesheet" href="css/normalize.css">
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="js/libs/ember-0.9.5.min.js"></script>
<script src="js/app.js"></script>
</head>
<body>
<h1>Ticket List</h1>
<script type="text/x-handlebars">
{{#view Ember.Button target="Welcome.ticketsController" action="loadTickets"}}
Load Tickets
{{/view}}
{{#each contentBinding="Welcome.ticketsController" tagName="ul"}}
<b>{{content.id}}</b> - {{content.buyerPartyId}}, <i>{{content.name}}</i>
{{/each}}
</script>
</body>
</html>
我确信我忽略了一些简单的事情!任何建议将不胜感激!!
以下是Chrome开发者控制台的错误堆栈。
Uncaught TypeError: Cannot read property 'hash' of undefined ember-0.9.5.min.js:13
(anonymous function) ember-0.9.5.min.js:13
(anonymous function)
b.VM.template ember-0.9.5.min.js:9
Ember.View.Ember.Object.extend.render ember-0.9.5.min.js:12
Ember.View.Ember.Object.extend.renderToBuffer ember-0.9.5.min.js:12
Ember.View.Ember.Object.extend.createElement ember-0.9.5.min.js:12
Ember.View.states.preRender.insertElement ember-0.9.5.min.js:12
Ember.View.Ember.Object.extend.invokeForState ember-0.9.5.min.js:12
c ember-0.9.5.min.js:10
j ember-0.9.5.min.js:10
f.flush ember-0.9.5.min.js:10
f.end ember-0.9.5.min.js:10
Ember.run.end ember-0.9.5.min.js:10
i ember-0.9.5.min.js:10
答案 0 :(得分:2)
AFAIK,{{each}}
,您需要直接提供控制器。类似的东西:
{{#each Welcome.ticketController}}
{{/each}}
看看这个jsFiddle http://jsfiddle.net/lifeinafolder/nVr4r/。它不再抛出错误了。
“加载门票”按钮不起作用,因为你还没有网址。
Emberjs文档也有几个使用{{each}}
的例子。你应该看看。
此外,您可能想要更新您的emberjs。在余烬世界,0.9.5.min已经相当古老了:)