在我的骨干模型中,我解析了服务器的响应:
var MyModel = Backbone.Model.extend({
urlRoot: "/users",
parse: function(response){
var data = {};
data.id = reponse.userDetails.id;
data.name = response.userDetails.firstname + " " + response.userDetails.lastname;
data.description = response.userDetails.description;
return data;
}
});
var myModel = new MyModel({id: 1});
myModel.fetch();
Run Code Online (Sandbox Code Playgroud)
使用此模型的视图可以操纵它,例如,如果用户单击视图以"选择"它,它将更新模型...
myModel.set({selected: true});
Run Code Online (Sandbox Code Playgroud)
...并且视图将根据模型的更改事件重新渲染,并突出显示"已选择"的用户.
在将模型保存到服务器时,如何仅发送服务器所需的属性?并忽略通过用户交互添加的属性.
要么
数据模型是否应始终反映服务器返回的内容?如果是这样,是否有更好的方式来存储用户交互(视图是否"选中")?它应该是一个单独的模型而不是实际的数据模型吗?
谢谢
如果对您的应用程序没有意义,则模型不需要镜像服务器上的数据.
对于模型的属性,如果您不需要在模板中呈现这些属性,则只需覆盖model.toJSON()以仅序列化要发送到服务器的属性.但请注意,在这种情况下,如果您使用this.model.toJSON()它渲染模板(或其他任何东西),那么它也会受到影响.如果这是一个问题,那么您可以覆盖model.sync()并操纵传入之前传入的数据Backbone.sync.例如:
var myModel = Backbone.Model.extend({
sync: function (method, model, options) {
// remove the unwanted attributes. Something like...
options.attrs = _.pick(model.attributes, 'attribute1', 'attribute2', 'attribute3');
return Backbone.sync.call(this, method, model, options);
}
});
Run Code Online (Sandbox Code Playgroud)