backbone-sync überschreiben, fügen Sie die url mit query-string?
Habe ich einige Probleme, gefolgt von einem token, das Rückgrat url-query-string und hoffe, Euch mir helfen könnte, hier draußen. Drei Dinge, die Sie wissen,
- Gibt es eine rest-api, die erwartet, dass ein token bei jedem request
- Ein nginx backend, das tut auth, dient das Rückgrat app + - proxy-req an die api unter /api
- ich bin eine neue javascript - + - backbone :/
Backbone-app tatsächlich liest das token aus einem cookie und ich muss anfügen, diese auf die Anfrage-url jedes mal Rückgrat macht einen Anruf. Ich sehe dies getan werden kann, durch die übergeordneten backbone-sync. aber es beunruhigt mich in ein paar verschiedene Dinge. wie, das ist, was ich tun
console.log('overriding backbone sync');
var key ="token";
Backbone.old_sync = Backbone.sync
Backbone.sync = function(method, model, options) {
if (method === 'read') {
if (!(model.url.indexOf('?key=') != -1)) {
model.url = model.url + '?key=' + key;
}
} else {
old_url = model.url();
if (!(old_url.indexOf('?key=') != -1)) {
model.url = function() {
return old_url + '?key=' + key;
}
}
}
Backbone.old_sync(method, model, options);
};
Modell.url wurde wieder eine Funktion, wenn Ihr nicht einen "read" - Methode und wusste nicht, wie man es gut behandelt und das andere Problem ist, wenn eine aufeinander folgende Anfrage gestellt wird, wird das token wird zweimal Hinzugefügt. Ich habe versucht, es zu entfernen, mit diesem indexOf Sachen mit kein Glück.
Gibt es einen besseren Weg, dies zu tun ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass Sie außer Kraft setzen müssen
sync
an alle:Wenn du jetzt ein Objekt erstellen und speichern Sie eine POST-Anforderung an
my/url/?key=key123
gesendet wird.Ich denke, man könnte auch überschreiben Sie die url-Methode ist dies das Verhalten, das Sie benötigen für alle Ihre Backbone-Modelle.
Ein allgemeiner Hinweis: Rückgrat der meisten Parameter, wie
url
werden kann, eine Funktion oder ein Wert. Ich weiß nicht, warum in Ihrem Beispiel war es eine Funktion einmal und Wert in einem anderen Fall, aber Sie immer in der Lage sein müssen, behandeln beide Möglichkeiten, wenn Sie diese überschreiben die internen Funktionen. Wenn man sich an Rückgrat der sourcecode wirst du sehen, dass Sie verwendengetValue
Zugriff auf diese Parameter:Update: Überlastung der url-Methode für alle Modelle arbeiten konnte wie diese:
Könnten Sie auch verlassen, die regelmäßige Rückgrat.Modell, wie es ist, und erstellen Sie Ihre eigene Basis-Klasse. Sehen http://documentcloud.github.com/backbone/#Model-extend für details.
Einfach die URL in etwa so:
In Ihrem überschrieben
.sync
Sie müssen nur diekey
Eigenschaft.