2017-02-24 3 views
0

私はcrud-route-mixinを構築しています。ここでは、ルートのデフォルトの機能とアクションを定義しています。Emberのリトリーブレコードオブジェクトの種類を認識

関数の1つが引数としてクエリオブジェクトを持ちます。アクション内私は、呼び出しを実行します。

_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

Queryオブジェクトは、(あなたが燃えさしデータを使用している場合)PromiseObjectまたはPromiseArrayのいずれかであるfindRecordまたはfindAllまたはqueryから返されました。だから、この(でもエラーの場合)のように入力し、それを確認することができます。

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

}

+0

'しかし、コントローラに必要なデータを提供するために、より単純なことではないでしょうか?'。はい、この質問は私の現在の状況を単純化したものです。 'instanceof' [オブジェクト]は必要な解決策を提供しますので、多くの感謝です! –