2013-08-27 10 views
5

Backbone documentation sagtBackbone.js - Parse Vermeiden Sie nach dem Speichern

Parse aufgerufen wird, wenn die Daten eines Modells vom Server zurückgegeben wird, in holen und speichern. Der Funktion wird das unverarbeitete Antwortobjekt übergeben, und sollte den Attribut-Hash zurückgeben, der im Modell festgelegt werden soll.

Aber ich habe parse Funktion für mein Modell angepasst. Ich möchte es nur ausführen, wenn ich Daten nicht abrufe, wenn ich Daten speichere.

Gibt es eine Möglichkeit, es zu tun? Ich kann meine Antwort innerhalb der Parse-Funktion überprüfen. Aber gibt es eine eingebaute Option, es zu tun? Diese

+0

möglich duplizieren: [hier] (http://stackoverflow.com/q/18243514/722238). Schaut auch [this] (https://github.com/jashkenas/backbone/pull/2551). – fbynite

Antwort

7

ist vom Backbone source file bezüglich Speichern eines Modells:

var model = this; 
var success = options.success; 
options.success = function(resp) { 
    model.attributes = attributes; 
    var serverAttrs = model.parse(resp, options); 
    if (options.wait) serverAttrs = _.extend(attrs || {}, serverAttrs); 
    if (_.isObject(serverAttrs) && !model.set(serverAttrs, options)) { 
     return false; 
    } 
    if (success) success(model, resp, options); 
    model.trigger('sync', model, resp, options); 
}; 

Sie können eine benutzerdefinierte Option auf Ihrem save passieren wie: model.save(null, { saved: true }), dann in Ihrem benutzerdefinierten parse:

parse: function(response, options) { 
    if (options.saved) return this.attributes; 
    // do what you're already doing 
} 

I haven Ich habe das überhaupt nicht getestet, aber es sollte dir wenigstens helfen.

+0

genial funktioniert super. Vielen Dank. – user10

4

Übergeben Sie einfach eine parse: false in die Speichermethode als eine Option.

m = new MyModel() 
s.save(null, {parse: false}) 
Verwandte Themen