2013-07-11 7 views
6

Powiedz, mam następujący formularz zawierający wzór i zagnieżdżony model:Restartowe modele spłaszczające na słupku?

<label>Company Name</label> 
<input type="text" ng-model="company.name" /> 

<label>Owner Name</label> 
<input type="text" ng-model="company.owner.name" /> 

Co mogę napisać tak:

Restangular.all('companies').post($scope.company); 

Co Czekam na stronie serwera (w tym przypadku Rails) jest zagnieżdżony hash coś takiego:

company: 
    name: Test Company 
    owner: 
     name: Test Owner 

Ale co ja dostaję to:

name: Test Company 
company: 
    name: Test Company 
owner: 
    name: Test Owner 

Wygląda na to, że modele są spłaszczane, a także pola z pierwszego modelu są powtarzane poza zakresem.

Jak mogę umieścić model z zachowaniem jego zagnieżdżenia, a najlepiej nie powtarzać pól modeli spoza zakresu w haszsie?

Odpowiedz

1

Jestem twórcą Restangular.

Czy mógłbyś console.log uzyskać wynik $ scope.company?

Po przekątnej nic nie pochlebia. Po prostu wysyłamy dokładnie JSon, który podałeś jako parametr, dlatego powinieneś sprawdzić, co jest wynikiem działania $ scope.company.

Później możemy to sprawdzić dalej.

Czy sprawdziłeś także kartę sieciową dla ładowności żądania? Czy to jest w porządku?

+0

Byłoby znacznie lepiej nadaje się jako komentarz, ale nie jest odpowiedzią na rzeczywisty problem. Debugowanie jest niezbędne, ale same kroki debugowania nie stanowią rozwiązania. – Makoto

+0

Uzgodnione. Przepraszam. Następnym razem skomentuję to, zamiast dodawać odpowiedź! – mgonto

+0

@mgonto: Masz absolutną rację.Nie zdawałem sobie sprawy, że mogę sprawdzić ładunek od obiektu "Przekątna", jest to wartość wysyłana: "postData": {"mimeType": "application/json; charset = UTF-8", "text": "{\" name \ ": \" My Company Ltd \ ", \" owner \ ": {\" name \ ": \" Mr Smith \ "}}" – matthewrk

0

Czuję potrzebę wyjaśnienia tego dla każdego, kto znajdzie to pytanie.

Przechodząc $scope.company przekazuje obiekt JS, który jest company który nie zawiera nazwę zmiennej zakres samego:

{ 
    name: 'Test Company', 
    owner: { 
     name: 'Test Owner' 
    } 
} 

Serwer będzie zobaczyć to jako zmienna POST nazwie name że jest ciągiem o wartości ' Firma Test „i kolejna zmienna o nazwie owner że jest tablicą z indeksem nazwie name z wartością” test Owner`

W PHP byłoby to:

$_POST['name']; // would = 'Test Company' 
$_POST['owner']; // would = array('name'=>'Test Owner') 

Jeśli ma to być tablica właściwości na stronie serwera dalej company to trzeba ująć $scope.company w samego obiektu JS z nieruchomości pod tytułem „Spółka”:

$scope.company = { 
    company: { 
     name : 'Test Company', 
     owner : { 
      name : 'Test Owner' 
     } 
    } 
}; 

teraz po stronie serwera znajdziesz to:

$_POST['company']; // would = array('name'=>'Test Company','owner'=>array('name'=>'Test Owner'))