识别Ember中的检索记录对象



我正在构建一个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。检查有效载荷是单个记录还是数组不是选项,因为我还需要在错误处理中进行此差异。

查询对象从findRecordfindAllquery返回的是PromiseObjectPromiseArray(如果使用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);
   }      

}

最新更新