2012-10-22 13 views
5

Stiamo implementando una funzione utilizzando i dati e le rotaie di rame e continuiamo a colpire. Non siamo sicuri se si tratta di un problema con il nostro codice, un bug con i dati di Ember o Ember o semplicemente che non lo stiamo ottenendo a causa della mancanza di documentazione.Associazioni di braci e URL nidificati

Qualsiasi aiuto sarebbe molto apprezzato.

Rails

Abbiamo un elenco di fare, con più voci. In Rails, vengono impostate come segue:

class ToDo < ActiveRecord::Base 
    has_many :to_do_entries, dependent: :destroy 
    alias_method :entries, :to_do_entries 
    validates_presence_of :title 
end 

class ToDoEntry < ActiveRecord::Base 
    attr_accessible :completed_at, :is_deleted, :priority, :title 

    belongs_to :to_do 
    alias_method :parent, :to_do 

    validates_presence_of :to_do, :title  
end 

I percorsi sono impostati come nidificata:

resources :to_dos do 
    resources :to_do_entries do 
    end 
end 

E così gli URL finali finiscono per essere /to_do /: to_do_id/to_do_entry /: to_do_entry_id.

Stiamo usando la gemma active_model_serializers e hanno i seguenti serializzatori configurare:

class ToDoSerializer < ActiveModel::Serializer 
    attributes :id, 
      :title 

    has_many :to_do_entries, embed: :objects 
end 

class ToDoEntrySerializer < ActiveModel::Serializer 
    attributes :id, 
      :to_do_id, 
      :title, 
      :priority 

    has_one :to_do 
end 

Ember

Stiamo utilizzando i dati tempora e l'adattatore REST e dei modelli equivalenti sono impostati come segue:

App.ToDo = DS.Model.extend({ 
    title: DS.attr('string'), 
    entries: DS.hasMany('App.ToDoEntry', { embedded: true }) 
}); 

App.ToDoEntry = DS.Model.extend({ 
    title: DS.attr('string'), 
    to_do_id: DS.attr('number'), 
    priority: DS.attr('number'), 
    todo: DS.belongsTo('App.ToDo') 
}); 

Il problema

mia comprensione è che dovremmo essere in grado di accedere alla lista di voci direttamente dalla ToDo, utilizzando il seguente nella console:

> t = App.ToDo.find(21) 
> e = t.get("entries") 

Questo non sembra funzionare, ma restituisce solo una classe e Non ho idea di come eseguire il debug e vedere se funziona.

Ho due domande specifiche:

  1. Come possiamo eseguire il debug, utilizzando la console, le associazioni e assicurarsi che siano correttamente funzionanti.

  2. Se carichiamo le voci separatamente (invece di averle incorporate nel genitore), come possiamo utilizzarle come percorsi annidati come quello che abbiamo sopra?

+0

Si potrebbe fare qualcosa come 't.get (" entries "). toArray()'. Sarai in grado di verificare gli ID. E puoi fare qualcosa come 't.get (" entries "). ToArray() [0] .get ('title')' per ispezionare una determinata proprietà. Non credo che le rotte del nido siano supportate immediatamente con l'adattore REST. In realtà c'era un [problema] (https://github.com/emberjs/data/issues/170) su di esso che ho aperto e ora è stato chiuso. Ho ancora avuto la possibilità di provare a implementare percorsi nidificati nel mio adattatore (per il momento sto utilizzando un work-around sul server). –

risposta

4

In primo luogo, ottenere un'associazione da un modello restituisce un DS.ManyArray che contiene gli oggetti come si presume.
Ci sono un paio di modi per eseguire il debug di questo, in primo luogo risponde ai normali metodi di array come length, firstObject, lastObject, objectAt.
Se ciò non è abbastanza utile, risponde anche a toArray che lo converte in un array JS vaniglia.

Sfortunatamente, l'ultima iterazione di ember-data rimuove effettivamente i record incorporati (penso che potrebbe essere temporaneo).URL di risorse Attualmente nidificate non sono supportate dal RESTAdapter di default, ma si può sempre personalizzare in base alle proprie esigenze

C'è comunque lavori in corso su come ottenere le risorse annidate in conduttore vedi PR #367 e #257

+0

Grande, grazie. Questo mi ha davvero aiutato. Sembra che fossimo a metà strada, ma abbiamo avuto un problema con il naming e l'inflector (o mancanza di). Scriverò un post sul blog per condividere ciò che abbiamo scoperto lungo la strada. –

Problemi correlati