2013-04-05 24 views
8

Mam istniejącą usługę napisaną z interfejsem API .NET Web.Adapter reszty Ember.js: mapowanie JSON bez korzenia (.NET Web API)

Jako przykład, usługa ta zwraca JSON w następującym formacie:

[ 
    { "id": 1, "name": "John" }, 
    { "id": 2, "name": "Jane" } 
] 

Jednak jak na Ember.js Rest Adapter documentation, Ember spodziewałbym JSON w następującym formacie:

{ 
    "persons": [ 
    { "id": 1, "name": "John" }, 
    { "id": 2, "name": "Jane" } 
    ] 
} 

Z tego powodu , Ember zwraca następujący błąd: Twój serwer zwrócił skrót z kluczem 0, ale nie masz dla niego odwzorowania

W żaden sposób nie planuję zmiany mojego API usług i sposobu, w jaki zwraca dane.

Czy możliwe byłoby pobranie Ember.js (najnowsza wersja) do pracy z istniejącymi danymi, które powracają? A jeśli tak, jak mogę to wdrożyć?

Odpowiedz

5

Ember jest bardzo elastyczny w tym sensie, dając możliwość rozszerzenia adaptera i serializera w celu zintegrowania aplikacji z dowolnym API zaplecza.

Powinieneś dostać WebAPIAdapter, który jest częścią Ember.js Template for Web API.

Dodatkowo możesz zajrzeć do this project, którą napisałem jako przykład, na podstawie tego samego szablonu (z pewnymi modyfikacjami, które zrobiłem sam). Nadal jest w fazie rozwoju i nie zawiera wszystkich najlepszych praktyk (jeszcze), ale powiedziałbym, że jest to ważny przykład.

Należy również zajrzeć do tego repo/library (Można go również zainstalować via NuGet), co pozwala wstępnie skompilować szablony kierownicy bezpośrednio do kolekcji Ember.TEMPLATES.

+0

Dzięki! Czy w twoim Ember-Contact-Management-WebAPI, czy robisz jakieś specjalne przystosowanie lub serializację danych do pracy z Ember? Zauważyłem twój ContactController zwraca IEnumerable lub ContactDto dla dostaje. Jest to praktycznie to, co ujawnia mój kontroler Web API, jednak mój format nie jest prawidłowy. –

+1

Sprawdź [ten katalog] (https://github.com/MilkyWayJoe/Ember-Contact-Management-WebAPI/tree/master/Ember-Contact-Management-WebAPI/Scripts/app), zobaczysz definicję Web API Adapter i WebAPISerializer, który obsługuje integrację bloku danych JSON z Ember-Data. Te klasy rozszerzają wbudowany RESTAdapter i RESTSerializer. – MilkyWayJoe

+0

Dokładnie tego potrzebowałem. Z jakiegoś powodu, używając DS.WebAPIAdapter, Ember trafia teraz mój adres URL usługi REST jako pojedynczy rzeczownik. Na przykład, przed użyciem RestAdapter, natrafi na http: // localhost/api/things. Teraz trafia na http: // localhost/api/thing. Jakieś pomysły? –

0

w API internetowej po prostu wrócić nowy obiekt} {

var persons = _personbService.GetPeople; 
     return new { persons }; 

będzie owinąć obiektu w obiekt o tej samej nazwie. Jeśli trzeba wywołać obiekt czegoś innego po prostu zrobić

new { SomeOtherName = persons; } 
+0

Działa to tylko wtedy, gdy zwracasz pojedynczy obiekt z tego co wiem. Jeśli masz powiązania (np. BlogPost/Komentarze), to komentarze są zwracane wewnątrz BlogPost, który wydaje się przełamać wartości domyślne. Pakiet ember web api zajmuje się nim https://www.npmjs.com/package/ember-web-api –

0

Miałem ten problem w węgielek i znaleźć najlepsze rozwiązanie dla mnie było wybudować nową serializatora i zastąpić metodę normalizePayload. kod poniżej:

export default DS.RESTSerializer.extend({ 
normalizePayload: function(payload) { 
var root = "posts"; 
var output = {}; 
output[root] = payload; 
return output; 

} });

Zawiesza początkową odpowiedź i dodaje do niej root, mam nadzieję, że pomoże!