9

我正在更新以下路线:

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

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

4

3 回答 3

14

您必须使用 .send() 在操作哈希中调用函数。例子:

    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){
        .. . .
     }
   }
});
于 2013-09-21T04:54:04.660 回答
6

还值得注意的是,您可能会fetchPage移出actions散列。如果它只在“内部”使用并且不直接响应 UI 事件,那么它不需要在actions哈希中。然后你可以用它来调用它:

items = this.fetchPage(nextPage, perPage);
于 2013-09-21T05:40:56.337 回答
4

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

在你的情况下:

this.send('fetchPage', nextPage, perPage);
于 2013-09-21T04:53:27.293 回答