2013-11-21 12 views
7

Come posso determinare il "nome del negozio" (non sono sicuro quale sia la terminologia corretta) per un determinato modello ED? Suppongo di avere App.Payment, esiste un metodo di archiviazione che consente di cercare il nome corrispondente, ad esempio payment (ad esempio, per l'utilizzo nelle query find)?Come ottenere il nome del negozio di Ember Data model

+0

È possibile chiamare lo store da ogni controller/router in cui ci si trova. Pertanto non è necessariamente collegato a una route o funzione. Per ottenere il percorso corrente relativo al nome del tuo negozio, guarda qui: http://stackoverflow.com/questions/18302463/get-current-route-name-in-ember – DelphiLynx

risposta

26

Per Ember dati 1.0 (e versioni successive)

modelName è una stringa dasherized. Si memorizzato come una proprietà di classe, quindi se avete un esempio di un modello:

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

Per Ember dati Pre 1,0

typeKey è il nome della stringa del modello. Viene memorizzato come una proprietà di classe del modello, quindi se si ha un'istanza di un modello:

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

qui 'model.get (" type "). TypeKey' può essere usato invece. – kushdilip

+1

Questa è sicuramente la risposta migliore. – chopper

0

Si potrebbe essere alla ricerca di metodo di stringa dasherize di Ember:

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

Ci potrebbe essere un modo integrato per effettuare questa operazione in Ember, ma io non l'ho trovato dopo aver trascorso qualche tempo alla ricerca.

MODIFICA: Ember Data consente anche di passare "App.SomeKindOfPayment" quando è necessario un nome modello, di solito controlla il formato del nome del modello e lo aggiorna al formato richiesto da solo.

0

store.find, store.createRecord e altri metodi di persistenza, utilizzare store.modelFor('myModel'). Dopo alcune impostazioni, chiama container.lookupFactory('model:' + key); dove la chiave è "myModel". Pertanto è applicabile qualsiasi sintassi di ricerca fabbrica valida. Per esempio:

Dato un modello chiamato OrderItems è possibile utilizzare: order.items, order_items, order-items, orderItems.

-1

Si scopre non c'era bisogno di fare questo, dopo tutto, ed ecco perché:

stavo cercando di rappresentazione stringa del modello ("payment" per App.Payment) al fine di chiamare store.findAll("payment"). Tuttavia, guardando ED source for store, la funzione findQuery chiama modelFor per cercare la fabbrica (App.Payment) dalla stringa (payment), a meno che non sia già fornita una fabbrica. E la fabbrica è facilmente accessibile dal controller chiamando this.get('model').type. Non è necessario convertirlo in una stringa (e viceversa).

Questo è il codice pertinente dalla sorgente Dati di origine.

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

Questo in realtà non risponde alla domanda che hai posto (a differenza di un'altra risposta), sebbene l'informazione sia pertinente. – Alex

Problemi correlati