Ich habe ein Clock
Modell in Backbone:
var Clock = Backbone.Model.extend({});
Ich versuche, eine Instanz davon zu erhalten, die die neuesten Informationen enthält /clocks/123
. Einige Dinge, die ich versucht habe:
eine "Klassen" -Methode
Clock.fetch(123)
// TypeError: Object function (){ ... } has no method 'fetch'
Erstellen einer Instanz und anschließendes Aufrufen fetch
:
c = new Clock({id: 123})
c.fetch()
// Error: A 'url' property or function must be specified
eine Sammlung
Ich habe versucht, eine AllClocks
Sammlungsressource zu erstellen (obwohl ich für so etwas auf der Seite keine Verwendung habe):
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
allClocks.fetch(123);
// returns everything from /clocks/
Wie bekomme ich nur eine API-gestützte Uhr?
javascript
model-view-controller
rest
backbone.js
James A. Rosen
quelle
quelle
Antworten:
Ihr zweiter Ansatz ist der Ansatz, den ich verwendet habe. Fügen Sie Ihrem Uhrenmodell Folgendes hinzu:
Bei diesem Ansatz wird davon ausgegangen, dass Sie Controller mit dem Hashbang in Ihrer URL wie http://www.mydomain.com/#clocks/123 implementiert haben. Er sollte jedoch auch dann funktionieren, wenn Sie dies noch nicht getan haben.
quelle
[collection.url]/[id]
.Versuchen Sie, urlRoot im Modell anzugeben :
Aus den Dokumenten:
quelle
currentBook.set('id', 13423, {silent:true})
. Das funktioniert auch, aber ich bin mir nicht sicher warum:currentBook.id = 13423
model.id
im Wesentlichen gleichbedeutend ist mitmodel.attributes.id
. Wenn Sie anrufenmodel.set('id')
, setzt Backbone auf dasmodel.id
, was Sie angegeben haben. Undmodel.id
wird beim Erstellen der modellspezifischen URL verwendet.Ich persönlich empfehle, die Dokumentation zur Model # url-Methode zu befolgen
Denken Sie daran, in Ihrer Sammlung die Sammlungs-URL hinzuzufügen:
und in der Initialisierungsfunktion Ihrer Ansicht tun Sie Folgendes:
Auf diese Weise führt das Backbone eine Ajax-Anfrage unter Verwendung dieser URL durch:
Ihr Modell wird aktualisiert und die Ansicht gerendert, ohne dass Collection # url oder Model # urlRoot geändert werden
Hinweis: Entschuldigung, dieses Beispiel wurde im Kaffeeskript veröffentlicht, aber Sie können es leicht in js übersetzen, indem Sie var-Anweisungen hinzufügen
quelle
{}
innerhalb der()
's für die übergebenen Objekte und optional;
am Ende der ZeilenAls Ergebnis stellen Sie eine Ajax-Anfrage an die
und Sie haben die JSON-Antwort zurück.
Enjoiiii !!!
quelle
... und tun Sie dies, wenn Sie den abschließenden Schrägstrich auf dem Modell urlRoot nicht möchten:
quelle
Sie sollten wahrscheinlich über eine Sammlung auf das Objekt zugreifen und es die ganze Zeit in der Sammlung behalten. So geht's:
quelle
Ich möchte die RESTful-URL verwenden, konnte aber nicht verstehen, warum 'postId' nicht zur Basis-URL hinzugefügt werden kann.
Dann weiß ich erst, nachdem ich 'idAttribute' als 'postId' in Model festgelegt habe, dass ich die richtige URL erhalten kann. so was:
quelle