Aktualisieren eines Modells mit Backbone.js + Rails funktioniert nicht (PUT route nicht gefunden)

8

In backbone.js aktualisiere ich ein Kategoriemodell:

%Vor%

Dies spart Ordnung und aktualisiert die Sammlung im Backbone korrekt. Aber auf der Schiene serverseitig spart es nicht wegen eines Routing-Fehlers:

%Vor%

Das Problem ist, dass rails erwartet, dass PUT / update eine URL mit der ID "/ categories /: id" und nicht nur "/ categories"

enthält

Ich habe das getestet, indem ich die Modell-URL geändert habe:

%Vor%

bis

%Vor%

Das funktioniert gut.

%Vor%

Muss ich Backbone hacken, um die ID zur URL hinzuzufügen, oder fehlt mir etwas?

    
dMix 24.05.2011, 15:47
quelle

3 Antworten

17

Backbone bestimmt die zu verwendende URL aus dem Ergebnis von Model.url (). Also wenn du

hast %Vor%

Die Speichermethode des Url-Backbones wird auf dem Server versuchen: host + '/ categories'

Wenn Sie keine URL-Funktion definieren, delegiert das Standardverhalten für die URL-Funktion an die Sammlung, in der sie sich befindet. Wenn Sie also eine Sammlung haben

%Vor%

und die Instanz einer Kategorie, die zu einer Categories-Sammlung gehört, erhalten automatisch den URL-Host + '/ categories' + '/' + category.id zum Speichern auf dem Server.

Wenn Ihr Modell jetzt nicht Teil einer Sammlung ist, können Sie dies nicht tun. Sie müssen die URL-Funktion in Ihrem Modell so etwas wie

überschreiben %Vor%

Beachten Sie, dass dies kein Hacking ist. Dies verwendet das Backbone korrekt. In zukünftigen Editionen von Backbone glaube ich, dass es kein Standardverhalten der URL-Funktion geben wird, und die URL-Funktion muss für alle Modelle geschrieben werden.

    
34m0 26.05.2011, 03:25
quelle
1

Wenn Sie ein Modell außerhalb einer Sammlung verwenden, geben Sie eine URL-Wurzel an:

%Vor%

Ссылка

    
Leo Romanovsky 15.04.2013 22:02
quelle
0

Wenn Ihre Kategorie auf der Serverseite vorhanden ist, dann sollte Ihr Kategorieobjekt eine ID haben und alles funktioniert. Aus dem Code, den Sie gesendet haben, wurde die ID nicht festgelegt:

%Vor%

fügen Sie die ID hinzu, wenn Sie die Kategorie instanziieren, und es sollte in Ordnung sein, andernfalls wird der Backbone versuchen, die Kategorie im Backend mit einem POST zu erstellen. Wenn Sie die ID angeben, wird ein PUT ausgeführt. Das ist, wenn Sie eine Sammlung für Ihr Objekt einrichten.

Ссылка

    
Julien 24.05.2011 15:53
quelle

Tags und Links