我正在构建一个crud-route-mixin
,在其中定义了路由的默认功能和操作。
其中一个函数作为参数查询对象;在操作中,我执行呼叫:
_doSomething(query) {
query.then( result => {
//do something default with this result
})
}
路由使用不同类型的方法调用_doSomething
功能。例如:
路由A
export default Ember.Route.extend(CrudRoute, {
setupController() {
this._super(...arguments);
this._doSomething(this.get('store').findAll('paper'));
}
}
路由B
export default Ember.Route.extend(CrudRoute, {
setupController() {
this._super(...arguments);
this._doSomething(this.get('store').findRecord('blog-post'));
}
}
我想知道,是否可以检索查询对象的方法名称或类型?所以我可以做这样的事情(伪代码):
_doSomething(query) {
query.then( result => {
if (query.getRetrieveMethodName() === 'findAll') {
//do something default with this array result
} else if (query.getRetrieveMethodName() === 'findRecord') {
//do something default with this single record result
}
})
}
P.S。检查有效载荷是单个记录还是数组不是选项,因为我还需要在错误处理中进行此差异。
查询对象从findRecord
或findAll
或query
返回的是PromiseObject
或PromiseArray
(如果使用Ember-Data)。因此,您可以检查类型(即使在错误的情况下):
import DS from 'ember-data';
_doSomething(query) {
if (query instanceof DS.PromiseObject) {
// single result
}
else if (query instanceof DS.PromiseArray) {
// array
}
else {
throw new Error('Expected ember-data proxy object');
}
// Do something useful
}
但是,向控制器提供所需的数据并不简单吗?
_doSomething(query, modelName, isArray) {
query.then( result => {
//do something default with this result
});
}
export default Ember.Route.extend(CrudRoute, {
setupController() {
this._super(...arguments);
this._doSomething(this.get('store').findRecord('blog-post'), 'blog-post', false);
}
}