从Ember.js中的路径中访问操作

时间:2013-09-21 04:24:27

标签: javascript ember.js

我正在更新以下路线:

App.SomeRoute = Ember.Route.extend({
 events: {
   getMore: function(){
     var controller = this.get('controller'),
         nextPage   = controller.get('page') + 1,
         perPage    = controller.get('perPage'),
         items;

     items = this.events.fetchPage(nextPage, perPage);
     controller.gotMore(items, nextPage);
   },

   fetchPage: function(page, perPage){
     . . . .
   }
 }
});

在大多数情况下,它运作正常。但是,events语法已被弃用。相反,我们假设使用actions。更新效果很好,直到我到达该行:

items = this.events.fetchPage(nextPage, perPage);

这会引发错误:

TypeError: this.events is null

不幸的是,如果我将代码更新为:

,我会收到同样的错误
items = this.actions.fetchPage(nextPage, perPage);
=> TypeError: this.actions is null

如何从同一路线中访问操作方法?

3 个答案:

答案 0 :(得分:14)

您必须使用.send()来调用actions哈希中的函数。例如:

    App.SomeRoute = Ember.Route.extend({
     actions: {
       getMore: function(){
         var controller = this.get('controller'),
             nextPage   = controller.get('page') + 1,
             perPage    = controller.get('perPage'),
             items;

        items = this.send('fetchPage', nextPage, perPage);
         controller.gotMore(items, nextPage);
      },

      fetchPage: function(page, perPage){
        .. . .
     }
   }
});

答案 1 :(得分:6)

值得注意的是,您可能会将fetchPage移出actions哈希值。如果它仅用于'内部'并且不直接响应UI事件,那么它不需要在actions哈希中。然后你可以用:

来调用它
items = this.fetchPage(nextPage, perPage);

答案 2 :(得分:4)

您可以使用send(actionName, args...)方法执行某些操作。

在你的情况下:

this.send('fetchPage', nextPage, perPage);