我正在构建一个crud-route-mixin
,我在其中为路由定义默认函数和操作。
其中一个函数将查询对象作为参数;在我执行呼叫的动作中:
_doSomething(query) {
query.then( result => {
//do something default with this result
})
}
路由使用不同的kind of methods调用_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。检查有效负载是否是单个记录或数组不是一个选项,因为我在错误处理中也需要这种干扰。
答案 0 :(得分:1)
从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);
}
}