我正在处理我的第一个Ember.js应用程序,虽然我有一个模板加载,当我尝试调用我在控制器中定义的操作时,我收到一个错误:“未捕获的错误:什么都没有处理'showNew'事件。“我不确定我是否错误地设置了路由和控制器,或者我是否遗漏了其他内容。
./ router.js:
Seanchai.Router.map(function(){
this.resource("stories", function(){
this.route('new');
});
});
Seanchai.StoriesRoute = Ember.Route.extend({
model: function(){
Seanchai.Story.find();
}
});
Seanchai.Router.reopen({
location: 'history'
});
./控制器/ stories_controller.js:
Seanchai.StoriesController = Ember.ArrayController.extend({
showNew: function() {
this.set('isNewVisible', true);
}
});
./模板/故事/ index.hbs:
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{{#each stories}}
{{view Seanchai.ShowStoryView storyBinding="this"}}
{{/each}}
{{#if isNewVisible}}
<tr>
<td>*</td>
<td>
Test
</td>
</tr>
{{/if}}
</tbody>
</table>
<div class="commands">
<a href="#" {{action showNew}}>New Story</a>
</div>
如果我将动作移动到路由器中,就像这样,它可以工作,但根据文档看起来我应该能够在控制器中执行此操作。
更新./router.js:
Seanchai.Router.map(function(){
this.resource("stories", function(){
this.route('new');
});
});
Seanchai.StoriesRoute = Ember.Route.extend({
model: function(){
Seanchai.Story.find();
},
events: {
showNew: function() {
this.set('isNewVisible', true);
}
}
});
Seanchai.Router.reopen({
location: 'history'
});
我显然错过了什么,但我不确定是什么。
答案 0 :(得分:3)
我猜你的showNew
事件没有在控制器上触发,因为你有一个stories.index
模板,所以你应该挂钩到应该是StoriesIndexController
的通信控制器:
Seanchai.StoriesIndexController = Ember.ArrayController.extend({
showNew: function() {
this.set('isNewVisible', true);
}
});
希望有所帮助
答案 1 :(得分:0)
我认为应该是:
Ember.ObjectController.extend({
showNew: function() {
this.set('isNewVisible', true);
}
});
而不是:
Ember.ArrayController.extend({
showNew: function() {
this.set('isNewVisible', true);
}
});
本指南可能会有所帮助 - Ember.js - Templates。