2013-07-11 8 views
6

Dire che ho il seguente modulo che comprende un modello e un modello nidificato:Modelli di appiattimento restangolare su palo?

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

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

Che mi post come questo:

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

Cosa mi aspetto sul lato server (in questo caso Rails) è un hash qualcosa nidificato in questo modo:

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

Ma quello che sto ricevendo è questo:

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

Sembra che i modelli vengano appiattiti e anche i campi del primo modello vengono ripetuti all'esterno dell'ambito.

Come posso inviare il modello mantenendo il suo annidamento e preferibilmente non ripetere i campi di modelli al di fuori del suo ambito nell'hash?

risposta

1

Sono il creatore di Restangular.

Potresti console.log l'output di $ scope.company?

Restangular non è lusinghiero nulla. È solo l'invio del JSon esatto che hai fornito come parametro, ecco perché dovresti controllare qual è l'output di $ scope.company.

Dopodiché, possiamo controllarlo ulteriormente.

Inoltre, è stata selezionata la scheda di rete per il carico utile della richiesta? Va bene?

+0

Questo sarebbe molto più adatto come commento, ma non una risposta al problema reale. Il debug è di vitale importanza, ma i passaggi di debug da soli non costituiscono una soluzione. – Makoto

+0

concordato. Scusate. La prossima volta commenterò questo invece di aggiungere una risposta! – mgonto

+0

@ mgonto: hai assolutamente ragione.Non ero a conoscenza del fatto che potessi controllare il payload da Restangular, questo è il valore inviato: "postData": {"mimeType": "application/json; charset = UTF-8", "text": "{\" name \ ": \" My Company Ltd \ ", \" owner \ ": {\" name \ ": \" Mr Smith \ "}}" – matthewrk

0

Mi sento il bisogno di chiarire questo per chiunque altro trovando questa domanda.

Passando $scope.company passa l'oggetto JS che è company che non include il nome della variabile portata stessa:

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

Il server vedranno questo come una variabile POST denominata name che è una stringa con il valore ' prova Company 'e un altro variabile denominata owner che è un array con un indice di nome name con un valore di' test Owner`

In PHP che sarebbe stato così:

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

Se si vuole che sia una serie di proprietà sul lato server denominato company allora avete bisogno di incapsulare $scope.company in un oggetto JS sé con una proprietà dal titolo "società":

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

Ora sul lato server troverete questo:

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