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

nul*_*ull 9 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){
     . . . .
   }
 }
});
Run Code Online (Sandbox Code Playgroud)

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

items = this.events.fetchPage(nextPage, perPage);
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

TypeError: this.events is null
Run Code Online (Sandbox Code Playgroud)

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

items = this.actions.fetchPage(nextPage, perPage);
=> TypeError: this.actions is null
Run Code Online (Sandbox Code Playgroud)

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

phk*_*tha 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){
        .. . .
     }
   }
});
Run Code Online (Sandbox Code Playgroud)


Jer*_*een 6

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

items = this.fetchPage(nextPage, perPage);
Run Code Online (Sandbox Code Playgroud)