2013-03-04 9 views
7

Mam więc (jak sądzę) ogólny problem z danymi Ember. Zastanawiam się, jak właściwie dostosować adapter, aby dostosować się do następującej sytuacji.Sub resources with emberjs + ember-data

Udawaj Mam dwa obiekty: Post i Tag

Wywołanie App.Post.find() zwraca wszystkie posty GET ing api.com/posts, App.Post.find(1) znajduje się w api.com/posts/1. To jest dobre.

App.Tag.find() zwróci wszystkie znaczniki dostępne pod adresem api.com/tags. App.Tag.find(1) zwróci odpowiedni tag pod prawidłowym adresem URL. Również dobre.

Jeśli tworzę nowe posty przez App.Post.createRecord({...}) Zostanie POST do poprawnego adresu URL. To samo dotyczy tworzenia Tags. Jak dotąd wszystko jest eleganckie.

na Post są osadzone, ponieważ są "włączone" w tym poście.

App.Adapter.map("App.Post", { 
    tags: {embedded: 'always'} 
}); 

Podczas ładowania dane Ember robią wszystko dobrze, a ja wciąż jestem bardzo szczęśliwy.

Więc mój problem wynika z dodania Tag do Post. Chciałbym, aby PUT lub POST obiekt znacznika na api.com/posts/1/tags, gdzie serwer zrobi wszystkie rzeczy po stronie serwera.

Obecnie

  1. Ember-danych, z zestawem {embedded: 'always'} config, wyśle ​​PUT do api.com/posts/1 z całego Post obiektu (z nowym Tag obiektu w zestawie) jako JSON stringified ciąg.

  2. Bez zestawu {embedded: 'always'} config, ember-data spróbuje PUT obiekt tag do api.com/tags i wyśle ​​w obiekcie Tag z parametrem post_id więc po stronie serwera można zrobić wszystkie rzeczy po stronie serwera.

Wolę nie robić 1, ponieważ mój serwer nie jest skonfigurowany w ten sposób. Wolałbym nie robić 2, ponieważ PUT/POST/GET s na api.com/tags powinien być naprawdę dla części "zarządzania tagami" mojej aplikacji, a nie tak naprawdę stosować znaczniki do postów. Innym przykładem tego zachowania jest Github v3 API for Labels & Issues.

Czy ktoś wie o sposobie obsługi tego z danymi ember? Dzięki!

+0

Mając dokładnie ten sam problem, który opisaliśmy w ten sam sposób - wydaje się nie mieć sensu, ponieważ Ember jest RESTFul, nie? – andreimpop

+0

Hej @andreimpop I skończyło się na użyciu wbudowanego: 'load', naszego własnego ajax'a, aby zatwierdzić serwer i ręcznie zmanipulować stanem-ember-data-machine. Wszystko to jest w porządku - planuję je ponownie, gdy to się stanie: http://emberjs.com/blog/2013/03/22/stabilizing-ember-data.html –

Odpowiedz

1

Można rozważyć zastąpienie funkcji RESTAdapter # dirtyRecordsForHasManyChange w celu zarządzania sposobem traktowania znaczników podczas transakcji.

Ale to trochę zagmatwane, że nie masz relacji osadzonych, jednak nie chcesz wykonywać PUT na znacznikach podczas zmian relacji modelu Post. Nie jestem pewien, czy widzę problem z nieoczekiwanym działaniem karty.

+0

Dzięki ... Nie jestem pewien zrozumiesz jednak mylącą część. Mam wbudowane relacje ... Działają idealnie na obciążeniu. Chciałbym tylko dodać Tagi do Posta, tak jak github dodaje etykiety do problemów. Zobacz: http://developer.github.com/v3/issues/labels/#add-labels-to-an-issue –

+0

Przepraszamy. Teraz rozumiem. Będziesz chciał zastąpić odrobinę JSONSerializer # addHasMany, a może nawet JSONSerializer # addBelongsTo. Ale ponieważ robisz to w ten sposób, powoduje to zamieszanie związane z tym, który model jest brudny (do popełnienia). Możesz skończyć się głębokim kopaniem i być może stworzyć własny adapter. – clintjhill

+0

Hej @clintjhill, nie żałuj! Doceniam twoją pomoc! Jeszcze raz dziękuję za rzucenie światła –