Ember.js - 未捕获TypeError:无法读取未定义的属性'hash'

时间:2012-09-01 06:37:20

标签: ember.js

我有一个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

1 个答案:

答案 0 :(得分:2)

AFAIK,{{each}},您需要直接提供控制器。类似的东西:

{{#each Welcome.ticketController}}
{{/each}}

看看这个jsFiddle http://jsfiddle.net/lifeinafolder/nVr4r/。它不再抛出错误了。

“加载门票”按钮不起作用,因为你还没有网址。

Emberjs文档也有几个使用{{each}}的例子。你应该看看。

此外,您可能想要更新您的emberjs。在余烬世界,0.9.5.min已经相当古老了:)