我正在使用Backbone和RESTful持久性。
是否可以为Backbone Collection create()方法定义一些任意输入参数?通常,Backbone期望相应的模型作为输入参数。
示例:
模型“Adder”具有以下属性:“id”,“date”和“sum”
我想通过传递3个参数来创建这些模型的实例(通过相应的集合'create()方法):a,b,c。然后,后端将计算sum = a + b + c并创建具有计算总和的记录。它应返回一个有效的Model对象并将其添加到集合中。
因此...
POST api/adder 1, 2, 3
Retured JSON:
{
"id": 153235,
"date": "11/11/11",
"sum": 6
}
更新
这种不太极端的例子可能会有所帮助。 如何将其他参数发送到POST方法,而不是模型的atts?
如果模型是:
{
a: 1,
b: 2,
c:3
}
我想发送一个更多的参数,比如compute_mode,它在模型本身中不存在。
我能这样做吗?
答案 0 :(得分:0)
听起来我的问题是,您需要在客户端存储和更改的计算参数,而这些参数不一定要通过POST
和PUT
发送到服务器要求。基本上,您希望保存/创建模型属性的子集。
对于这种情况,一个好的模式是在模型中定义一个serverAttrs
属性 - 一个属性哈希,表示要保存到服务器的属性。
然后,您可以在模型或模型扩展的基本模型中覆盖Backbone的save
方法(更好的方法)。
var MyModel = Backbone.Model.extend({
idAttribute: 'id',
serverAttrs: [
'id',
'label',
'fullName',
],
defaults: {
label: 'My Default Label',
fullName: '',
firstName: 'John',
lastName: 'Smith'
},
initialize: function(options){
this.updateFullName();
this.on('change:firstName change:lastName', this.updateFullName);
},
updateFullName: function(){
this.set('fullName', this.get('firstName') + ' ' + this.get('lastName'));
},
save: function(attrs, options) {
attrs = attrs || this.toJSON();
options = options || {};
if (this.serverAttrs) {
attrs = _.pick(attrs, this.serverAttrs);
}
return Backbone.Model.prototype.save.call(this, attrs, options);
}
});
在我们的save方法中,我们检查是否存在serverAttrs
属性,如果它存在,我们只选择那些属性并将它们保存到服务器。
因此,总而言之 - 您可以在模型中存储您想要的任何属性(在合理范围内),然后通过定义serverAttrs
属性,仅将您想要持久化的属性发送到服务器。