识别Ember中的检索记录对象

时间:2017-02-24 08:05:48

标签: ember.js ember-data

我正在构建一个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。检查有效负载是否是单个记录或数组不是一个选项,因为我在错误处理中也需要这种干扰。

1 个答案:

答案 0 :(得分:1)

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);
   }      

}