2012-03-28 18 views
0

Hallo ich muss meine Sammlung formatieren, um für meine Ruhe die Anfrage zu akzeptieren. (I neu erstellt mein Projekt so weiß ich schon speziell, welches Format mein REST akzeptiert)format sammlung in backbone.js

Das Format sollte sein:

{"input":"{invoice:[{}]","InvoiceDetails:[{},{},{}]}} 

Also in meinem Rückgrat Projekt ich habe:

CartCollection //collection 
InvoiceDetailsCollection //collection 
Invoice //model 
InvoiceDetail //model 
Cart //model 

Das ist mein Save-Funktion:

save: function(){ 
    invoice = new Invoice(); 
    invoice.set({POSWorkstationID: "POS7"}); 
    invoice.set({POSClerkID: "admin"}); 
    invoice.set({CustomerName: "Alice in Wonderland Tours"}); 
    invoice.set({IsFreightOverwrite: true}); 
    invoice.set({BillToCode: "CUST-000009"}); 
    InvoiceDetailCollection.add([{Invoices: invoice}]); 

    _.each(this.collection.models, function(cart){ 
     InvoiceDetailCollection.add([{InvoiceDetails: cart }]); 
    }); 
    alert(JSON.stringify(InvoiceDetailCollection.toJSON())); 
} 

Mein aktuelles Format ist dies

[{"Invoices":{"POSWorkstationID":"POS7","POSClerkID":"admin","CustomerName":"Alice in Wonderland Tours","IsFreightOverwrite":true,"BillToCode":"CUST-000009"}},{"InvoiceDetails":{"Qty":"1","ItemCode":"ITEM-000004","ItemDescription":"Old World Lamppost\r\n\r\n","RetailPrice":107.99,"SalesPrice":107.99}}] 

Antwort

0

Nichts in diesem Setup sieht Standard.

Die Art und Weise verwalten die InvoiceDetailCollection kein normales Collection ist wie, sieht eher wie ein Model mit zwei Collections in. Eine Collection wird mit einem Model oder dem Hash gefüttert, um ein Model nicht mit diesem Schlüssel/Wert Paare zu erstellen, das nicht mit dem Collection.model übereinstimmt.

Dann wird die URL, die Sie bauen möchten, hat einen Magie Schlüssel Wurzel input dann einen Schlüssel invoice (lowcase) genannt, die eine Reihe von nur ein Element enthält, das ein Hash ist, dann InvoiceDetails (Camelcase), die Sie kontinuierlich sind Zurücksetzen auf den tatsächlichen cart Inhalt.

Ich denke, was Sie brauchen, ist:

  • InvoiceDetailsCollection: halten alle den Karren
  • Invoice: die Rechnung
  • Input: das Modell, das

    dann beide Invoice und InvoiceDetails

hält :

  1. Erstellen Sie das Modell Invoice.
  2. Feed die InvoiceDetailsCollection mit Ihrem Wagen.
  3. die Rechnung an Eingangs hinzufügen: Input.set("invoice", invoice)
  4. die InvoiceDetailsCollection auf Input hinzufügen: Input.set("invoice_details", InvoiceDetailsCollection)

die Input.toJSON zu kehrt input: this.toJSON()(Code vereinfacht) Überschreiben.

Aber ich denke, Ihr Leben könnte einfacher sein, wenn Sie diese URL für etwas mehr REST ändern könnten.Ich denke, dass all diese Informationen an die Invoice Modell gehört, so dass Sie eine Anfrage, wie annehmen könnte:

  • POST: /invoices
  • DATA: { "POSWorkstationID": "POS7", "POSClerkID": "admin", ... , "Details": [{}, {}] }

Auf diese Weise können Sie das Input Modell entfernen, die ich vorgeschlagen, all das seltsame Verhalten und das InvoiceDetailsCollection in das Invoice Modell zu verpacken.

+0

InvoiceDetailsCollection: halten alle Wagen // Eigentlich mache ich das. Nur, dass ich InvoiceDetails hinzufügte, während ich die Warenkörbe zu InvoiceDetailCollection hinzufügte. – jongbanaag

Verwandte Themen