2013-08-27 6 views
5

Backbone documentation mówibackbone.js - unikanie parse po zapisać

parse nazywa ilekroć dane modelu jest zwrócony przez serwer, w sprowadzić, i oszczędzać. Funkcja jest przekazywana do surowego obiektu odpowiedzi, a powinien zwracać wartość mieszania atrybutów do modelu.

Ale mam dostosowaną funkcję parsowania dla mojego modelu. Chcę go uruchomić tylko wtedy, gdy pobierasz dane nie podczas zapisywania danych.

Czy jest jakiś sposób na zrobienie tego? Mogę sprawdzić moją odpowiedź w funkcji parsowania. Ale czy jest jakaś wbudowana opcja, aby to zrobić?

+0

możliwy duplikat: [tutaj] (http://stackoverflow.com/q/18243514/722238). Sprawdź również [to] (https://github.com/jashkenas/backbone/pull/2551). – fbynite

Odpowiedz

7

To jest ze szkieletu source file dotyczące zapisywania model:

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); 
}; 

Ty mógł przejść opcję niestandardową na swojej save jak: model.save(null, { saved: true }), następnie w swoim zwyczaju parse:

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

I haven W ogóle tego nie testowałem, ale przynajmniej powinienem zacząć.

+0

niesamowite działa świetnie. dzięki. – user10

4

Po prostu prześlij parse: false do metody zapisu jako opcję.

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