Zabrakło mi do tego problemu z dokładnym próbuje odpowiedzieć na niezmiennych właściwościach. Problem z modeli szkielet, że domyślnie oni pisać wszystko albo nic. Ale można zrobić częściowych aktualizacji. Aby poradzić sobie z tym, że stworzył potomka Backbone.Model i overrode model.save tak:
save : function(key, value, options) {
var attributes, opts;
//Need to use the same conditional that Backbone is using
//in its default save so that attributes and options
//are properly passed on to the prototype
if (_.isObject(key) || key == null) {
attributes = key;
opts = value;
} else {
attributes = {};
attributes[key] = value;
opts = options;
}
//Now check to see if a partial update was requested
//If so, then copy the passed attributes into options.data.
//This will be passed through to Backbone.sync. When sync
//sees that there's an options.data member, it'll use it instead of
//the standard attributes hash.
if (opts && opts.partialUpdate) {
opts["data"] = JSON.stringify(attributes);
opts["contentType"] = "application/json";
}
//Finally, make a call to the default save now that we've
//got all the details worked out.
return Backbone.Model.prototype.save.call(this, attributes, opts);
}
To pozwala mi selektywnie dodawać atrybuty, które chcę backend tak:
//from the view - the GET may have delivered 20 fields to me, but I'm only interested
//in posting the two fields.
this.model.save({
field1 : field1Value,
field2 : field2Value
},{
partialUpdate : true
});
Nie mogę powiedzieć, jak to uczynił moje życie o wiele łatwiejsze! Teraz biorąc pod uwagę, że niektórzy mogą zapytać, dlaczego nie po prostu przejść changedAttributes () JSON? Powodem jest to, ponieważ w niektórych przypadkach, zmienione atrybuty są przeznaczone tylko dla strony klienta, a konkretnie do wywołania zmiany poglądów, które również korzystają z tego modelu.
W każdym razie, to wypróbować ...