观察员早期开火行动。在动作初始化之前观察到了动作

时间:2015-10-16 06:51:22

标签: ember.js

模板

<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'。

3 个答案:

答案 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'),
相关问题