我正在更新以下路线:
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
如何从同一路线中访问操作方法?
答案 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);