Wdrażamy funkcję korzystającą z danych Ember i Railsów i ciągle uderzając w przeszkodę. Nie jesteśmy pewni, czy to jest problem z naszym kodem, błąd z danymi Ember lub Ember, czy tylko, że nie otrzymujemy go z powodu braku dokumentacji.Stowarzyszenia Ember i zagnieżdżone adresy URL
Każda pomoc będzie naprawdę doceniana.
Szyny
Mamy do zrobienia, z wieloma wpisami. W Rails, są one ustawione w następujący sposób:
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
Trasy są ustawione jako zagnieżdżony:
resources :to_dos do
resources :to_do_entries do
end
end
I tak URL końcowe skończyć się /to_do /: to_do_id/to_do_entry /: to_do_entry_id.
Używamy gem active_model_serializers i mają następujące serializers skonfigurować:
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
Używamy dane Ember i adaptera spoczynku i równoważne modele są ustawione w następujący sposób:
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')
});
problem
moim rozumieniu jest to, że powinniśmy być w stanie uzyskać dostęp do listy wpisów bezpośrednio z Todo, za pomocą następujących czynności w konsoli:
> t = App.ToDo.find(21)
> e = t.get("entries")
To wydaje się działać, ale po prostu zwraca klasę i Nie mam pojęcia, jak to debugować i sprawdzić, czy działa.
Mam dwa konkretne pytania:
Jak możemy Debug za pomocą konsoli, stowarzyszenia i upewnij się, że są one prawidłowo działać.
Jeśli załadujemy wpisy osobno (zamiast umieszczać je w rodzicu), w jaki sposób możemy użyć tych zagnieżdżonych tras, takich jak ta, którą mamy powyżej?
Można coś zrobić PR w jak 't.get (" wpisy "). toArray()'. Będziesz w stanie zweryfikować identyfikatory. I możesz zrobić coś takiego jak 't.get (" wpisy "). ToArray() [0] .get ('title')', aby sprawdzić daną właściwość. Nie wierzę, że linie gniazdowe są obsługiwane po wyjęciu z pudełka z adapterem REST. W rzeczywistości był to [problem] (https://github.com/emberjs/data/issues/170) o tym, który otworzyłem i został on teraz zamknięty. Miałem jeszcze szansę spróbować zaimplementować trasy zagnieżdżone w moim adapterze (na razie używam na serwerze obejścia). –