Backbone.js sync () kann die URL-Eigenschaft nicht finden

8

Mit diesem erfundenen Beispielcode:

%Vor%

Ich sehe Error: A "url" property or function must be specified Es gibt Unmengen von Posts, die sich um dieselbe Fehlermeldung drehen, aber alle, die ich gefunden habe, sind das Ergebnis einer URL-Eigenschaft oder -Funktion, die irgendwo auf dem Weg definiert wurde. p>

Ich habe das Gefühl, irgendwo einen Verknüpfungsschritt verpasst zu haben - vielleicht verlasse ich mich implizit auf eine "magische" Verbindung / Callback / Eigenschaft / Attribut, die Backbone.js nicht wirklich automatisch setzt?

    
Chris Tonkinson 24.01.2013, 01:04
quelle

5 Antworten

3

Ich würde zuerst einen Schritt zurückgehen und Ihren Anwendungsfall und das von Ihnen gewählte Schema untersuchen. Sie versuchen eindeutig, dem Warenkorb eines Nutzers Produkte hinzuzufügen.

Das Problem, das ich sehe, ist, dass Sie den Einkaufswagen zu einer Sammlung gemacht haben. Ich würde vorschlagen, ein Modell zu erstellen, das eine Sammlung von Produkten enthält.

%Vor%

Mit diesem neuen Schema können Sie Folgendes tun:

%Vor%

Ein zusätzlicher Vorteil dieses Schemas besteht darin, dass Sie zusätzliche Datenattribute in Ihren Einkaufswagen einfügen können, z. B. die Kunden-ID, wenn der Einkaufswagen erstellt wurde, usw.

    
anushr 24.01.2013, 06:44
quelle
7

Ich denke nicht, dass du sync direkt aufrufen solltest; Ich denke, wonach Sie suchen, ist c.fetch() (oder p1.save(); p2.sav2() , je nachdem, in welche Richtung Sie versuchen, Daten zu senden). Sync ist genau das, was Backbone intern für fetch / save verwendet (und wenn Sie die AJAX-Details von wie ändern möchten), gibt es eine Synchronisierung zum Überschreiben, ansonsten jedoch du solltest es nicht brauchen).

Wenn Sie jedes Modell bequem in einer Sammlung speichern möchten, können Sie dies mit der integrierten Underscore-Methode "invoke" tun (Sie sollten c.save() ausführen können, aber ich denke, Sie können das nicht) ):

%Vor%     
machineghost 24.01.2013 01:12
quelle
1

Die Methode sync() ist lediglich ein Proxy für Backbone.sync .

fetch() und save() sind eine bequeme Methode für sync() , so dass Sie davon ausgehen können, dass das erste sync() Argument ('read', 'patch', 'update' usw.) gegeben ist / p>

Um dies selbst aufzurufen, müssen Sie die Methodensignatur für diese Methode abgleichen, um sie direkt aufzurufen:

%Vor%

So geht fetch() (beachten Sie den übergebenen 'read' Parameter, sowie den this Verweis auf das Modell:

) %Vor%

So funktioniert save() :

%Vor%     
buley 24.01.2013 04:25
quelle
0

Verwenden Sie in diesem Fall save() im Gegensatz zu sync()

save() übernimmt im Wesentlichen die Arbeit von Backbone.sync() via Proxy, sollte aber automatisch die Attribute vom Aufrufer von save übernehmen.

Wenn Sie sync() sogar als Methode aus dem Modell / der Sammlung aufrufen, müssen Sie das Modell angeben, das Sie synchronisieren möchten () als zweiten Parameter.

Also, myModel.sync('PUT',myModel) wird funktionieren. In Ihrem Fall speziell c.sync('PUT',c)

    
Tony 11.06.2015 22:27
quelle
0

Sie können eine Sammlung nicht auf diese Weise speichern. Es ist nicht RESTful, da es bei REST darum geht, den Zustand eines (einzelnen) Modells zu übertragen. Daher ist es sinnvoll, dass Backbone.Collection save() nicht unterstützt.

Eine Lösung besteht darin, .invoke('save') für die Sammlung aufzurufen, wie @machineghost vorgeschlagen hat, aber beachten , dass dies zu einer diskreten Anforderung für jedes einzelne Modell in der Sammlung führt! Wenn Sie mehr als ein paar Modelle speichern möchten, ist dies wahrscheinlich keine gute Idee.

Aber Sie können immer ein Backbone.Model speichern ... also warum nicht eins machen?

%Vor%

Oder kürzer gesagt:

%Vor%

Beachten Sie, dass der Server dann eine POST- oder PUT-Nachricht mit einer einzelnen Eigenschaft namens cart erhalten würde, einem Array mit mehreren Modellen, die entsprechend verarbeitet werden müssten.

Mir ist klar, dass der Fragesteller eine andere Lösung für sein Problem gefunden hat, aber hoffentlich wird das jemandem helfen.

    
Lambart 03.07.2015 01:22
quelle

Tags und Links