模板
<script type="text/x-handlebars">
<h2>Welcome to Ember.js</h2>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{input type="text" value=model.name}}
</ul>
<p {{action 'test'}}>test</p>
</script>
ember code
App = Ember.Application.create();
App.Router.map(function () {
// put your routes here
});
App.IndexRoute = Ember.Route.extend({
model: function () {
return Ember.Object.create({name:'dilip'});
},
actions:{
test:function(){
alert('route test');
console.log('test')
}
}
});
App.IndexController = Ember.Controller.extend({
handleChange:function()
{
console.log('handle')
this.send('test')
}.observes('model.name')
})
动作'测试'已在路线中定义,但显示在误差之下。此错误仅在我使用观察时出现。
加载路线时出错:错误:没有处理动作'test'。
答案 0 :(得分:0)
您需要在控制器中处理操作,而不是在路径中。看看这个jsbin:http://emberjs.jsbin.com/yubowi/edit?html,js,output
答案 1 :(得分:0)
您应该在控制器中定义您的操作。
this.send('test')
在此扩展类中查找操作(在本例中为控制器)。如果你做this.sendAction('test')它会出去寻找动作但是这些必须像`actionName =“actionName”那样被预定义。当您拥有需要与控制器交互的组件时,通常会使用此方法
{{my-component actionName="actionName"}} < sendAction now looks for controllers action
答案 2 :(得分:0)
观察者在路线准备好处理行动之前会发射。这种类型,sorta是有道理的,因为控制器是“建立”作为路线的一部分。我已经通过在路由setupController
挂钩中设置一个属性来解决这个问题,让控制器知道它已准备就绪!
// Route
setupController: function(controller, model) {
this._super(controller, model);
controller.set('routeIsReadyForAction', true);
}
// Controller
routeIsReadyForAction: false,
someObserver: function() {
if (!this.get('routeIsReadyForAction')) {
return;
}
this.send('someRouteAction');
}.observes('someProperty'),