webentwicklung-frage-antwort-db.com.de

Wie kann ich Backbone.sync überschreiben?

Ich probiere Backbone.js aus, und ich versuche unter anderem, eine Remote-API aufzurufen. Daher muss ich in der Lage sein, Backbone.sync zu überschreiben, so wie ich es verstehe die Dokumentation .

In der Dokumentation selbst gibt es kein Beispiel dafür, und es scheint keine Google-Gruppe für Backbone zu geben. Kann jemand ein Beispiel dafür nennen?

145
picardo

Schauen Sie sich dieses mit Anmerkungen versehene Quellbeispiel an, in dem sie Backbone.sync Mit einer lokalen Speicheralternative überschreiben

backbone-localStorage

Grundsätzlich sollte Backbone.sync eine Funktion sein, die 4 Argumente akzeptiert:

Backbone.sync = function(method, model, options) { };

Sie müssen entweder options.success Oder options.error Auslösen, je nachdem, ob das method erfolgreich war. Die Methoden sind im Format:

  • "create": Sie haben erwartet, dass Sie das Modell auf dem Server erstellen
  • "read": Es wurde erwartet, dass Sie dieses Modell vom Server lesen und zurückgeben
  • "update": Erwartet, dass Sie das Modell auf dem Server mit dem Argument aktualisieren
  • "delete": Sie haben erwartet, dass Sie das Modell vom Server löschen.

Sie müssen diese 4 Methoden implementieren und definieren, was Sie für Ihren "server" Wollen.

Natürlich sind dies nur die Dinge, die Backbone.sync muss implementieren. Sie können mehr methods implementieren und Sie können mehr Parameter an success zurückgeben, aber es ist am besten, dies nicht zu tun.

Vergewissern Sie sich am besten, dass es das Gleiche tut wie Backbone.sync, Damit Ihre Programmierung nicht auf eine Implementierung, sondern auf eine Schnittstelle erfolgt. Wenn Sie Ihren geänderten Backbone.sync - Code für beispielsweise den localStorage-Code austauschen möchten, müssen Sie ihn nicht selbst erweitern, um ihn mit Ihrem erweiterten Backbone.sync-Code abzugleichen. "

[Bearbeiten]

Beachten Sie auch, dass Sie mehrere Implementierungen von sync verwenden können. Jeder Verweis auf Backbone.sync Ist tatsächlich (this.sync || Backbone.sync). Sie müssen also nur Folgendes tun:

var MyModel = Backbone.Model.extend({ 
    ...

    "sync": myOwnSpecificSync,

    ...
});

Backbone.sync Ist nur die globale Standardeinstellung, die alle Modelle verwenden, es sei denn, für die Modelle wurde eine sync -Methode festgelegt.

225
Raynos

Ich weiß, dass diese Antwort etwas zu spät ist, und die Antwort von @Raynos ist großartig, aber ich habe es ein bisschen anders gemacht, und vielleicht wäre es für Sie oder jede andere Person nützlich, die versucht, eine API mit Backbone zu verwenden.

Anstatt Backbone.sync zu überschreiben, habe ich Backbone.ajax überschrieben, da hier die Ajax-Anforderung erfolgt.

Hier ist ein Beispiel:

// Set the default implementation of `Backbone.ajax` to proxy through to `$`.
Backbone.ajax = function() {
    var args = Array.prototype.slice.call(arguments, 0);

    // Here, I add the OAuth token (or any other token)
    // But before, I check that data exists, if not I add it
    if (args[0]['data'] === undefined) {
        args[0]['data'] = {};
    }
    args[0]['data']['token'] = 'any_api_token_here';

    return Backbone.$.ajax.apply(Backbone.$, args);
};
15
Cyril N.

Normalerweise muss ich die sync -Methode des Backbones überschreiben, wenn ich nur bestimmte Attribute synchronisieren muss. Eine typische Implementierung sieht folgendermaßen aus:

sync: function (method, model, options) {
  options.data = _.pick(this.attributes, 'foo', 'bar', 'baz');
  return Backbone.sync.call(this, method, model, options);
}
11
Jesse Atkinson