2013-11-21 8 views
7

特定のEDモデルの「ストア名」(適切な用語がわからない場合)はどのようにして確認できますか?私がApp.Paymentを持っていると言うと、その対応する名前、つまりpayment(例えば、findクエリで使用する)を検索するストアメソッドがありますか?あなたがエンバーの文字列dasherize方法を探しているかもしれないEmberデータモデルのストア名の取得方法

+0

あなたがいるすべてのコントローラ/ルータからストアを呼び出すことができるので、必ずしもルートにアタッチされているわけではありませんまたは機能。あなたの店舗名に関連する現在のルートを取得するには、ここをクリックしてください:http://stackoverflow.com/questions/18302463/get-current-route-name-in-ember – DelphiLynx

答えて

26

エンバーデータ1.0 (およびそれ以降)

modelNameはdasherized文字列です。これは、クラスのプロパティとして保存され、あなたがモデルのインスタンスを持っている場合:エンバーデータ前1.0

typeKeyについては

var model = SuperUser.create(); 
console.log(model.constructor.modelName); // 'super-user' 

は、モデルの文字列名です。モデルのクラスプロパティとして保存されます。

var model = App.Name.create({}); 
console.log(model.constructor.typeKey); // 'name' 
+0

ここでは 'model.get(" type ")。typeKey'を代わりに使用できます。 – kushdilip

+1

これは間違いなく良い答えです。 – chopper

0

var fullClassName = "App.SomeKindOfPayment"; 
var className = fullClassName.replace(/.*\./, ""); // => "SomeKindOfPayment" 
var dasherizedName = Ember.String.dasherize(className); // "some-kind-of-payment" 

ありエンバーでこれを行うには、組み込みの方法かもしれないが、私は見ているいくつかの時間を過ごした後、それを発見していません。

EDIT:Ember Dataは、モデル名が必要なときに「App.SomeKindOfPayment」を渡すこともできます。通常、モデル名の形式をチェックし、それを必要な形式に自動的に更新します。

0

store.find,などのパーシスタンス方式の場合は、store.modelFor('myModel')を使用してください。セットアップ後、container.lookupFactory('model:' + key);が呼び出されます。ここでkeyは 'myModel'です。したがって、任意の有効なファクトリルックアップ構文が適用可能です。たとえば、次の

あなたが使用することができます OrderItemsというモデルを考える

order.itemsorder_itemsorder-itemsorderItems

-1

それは結局これを実行する必要はありませんでしたが判明し、そしてなぜここです:私はstore.findAll("payment")を呼び出すためにモデル(App.Paymentための「payment」)の文字列表現にしようとしていた

。しかし、ED source for storeを見ると、findQueryファンクションは、ファクトリがすでに指定されていない限り、modelForを呼び出してファンクション(App.Payment)を文字列(payment)からルックアップします。工場はコントローラから簡単にアクセスできます。this.get('model').typeを呼び出してください。それを文字列に変換する必要はありません。

ここにEmberデータソースの関連コードがあります。

modelFor: function(key) { 
    var factory; 

    if (typeof key === 'string') { 
     factory = this.container.lookupFactory('model:' + key); 
     Ember.assert("No model was found for '" + key + "'", factory); 
     factory.typeKey = key; 
    } else { 
     // A factory already supplied. 
     factory = key; 
    } 

    factory.store = this; 
    return factory; 
    }, 
+0

これは実際にあなたが提起した質問に答えるものではありません(別の回答とは異なります)、情報は関連しています。 – Alex

関連する問題