Backbone Collection.create() 任意参数
Backbone Collection.create() with arbitrary parameters
我正在使用 Backbone 和 RESTful 持久性。
是否可以为 Backbone 集合 create() 方法定义一些 任意 输入参数?通常,Backbone 期望相应的模型作为输入参数。
示例:
模型 "Adder" 具有以下属性:"id"、"date" 和 "sum"
我想通过传递 3 个参数来创建这些模型的实例(通过相应集合的 create() 方法):a、b、c。然后后端将计算 sum=a+b+c 并创建一个包含计算总和的记录。它应该 return 一个有效的模型对象并将其添加到集合中。
所以...
POST api/adder 1, 2, 3
返回 JSON:
{
"id": 153235,
"date": "11/11/11",
"sum": 6
}
更新:
也许这个,不太极端的例子会有所帮助。
除了模型的 atts 之外,如何向 POST 方法发送其他参数?
如果模型是:
{
a: 1,
b: 2,
c:3
}
我想再发送一个参数,例如 calculation_mode,模型本身不存在。
我可以这样做吗?
在我看来,您的问题是您需要在客户端存储和更改计算参数,而您不一定希望通过 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);
}
});
在我们的保存方法中,我们检查 serverAttrs
属性 是否存在,如果存在,我们只提取那些属性并将它们保存到服务器。
因此,总而言之 - 您可以在模型中存储您想要的任何属性(在合理范围内),然后通过定义 serverAttrs
属性 仅将您想要持久保存的属性发送到服务器。
我正在使用 Backbone 和 RESTful 持久性。
是否可以为 Backbone 集合 create() 方法定义一些 任意 输入参数?通常,Backbone 期望相应的模型作为输入参数。
示例:
模型 "Adder" 具有以下属性:"id"、"date" 和 "sum"
我想通过传递 3 个参数来创建这些模型的实例(通过相应集合的 create() 方法):a、b、c。然后后端将计算 sum=a+b+c 并创建一个包含计算总和的记录。它应该 return 一个有效的模型对象并将其添加到集合中。
所以...
POST api/adder 1, 2, 3
返回 JSON:
{
"id": 153235,
"date": "11/11/11",
"sum": 6
}
更新:
也许这个,不太极端的例子会有所帮助。 除了模型的 atts 之外,如何向 POST 方法发送其他参数?
如果模型是:
{
a: 1,
b: 2,
c:3
}
我想再发送一个参数,例如 calculation_mode,模型本身不存在。
我可以这样做吗?
在我看来,您的问题是您需要在客户端存储和更改计算参数,而您不一定希望通过 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);
}
});
在我们的保存方法中,我们检查 serverAttrs
属性 是否存在,如果存在,我们只提取那些属性并将它们保存到服务器。
因此,总而言之 - 您可以在模型中存储您想要的任何属性(在合理范围内),然后通过定义 serverAttrs
属性 仅将您想要持久保存的属性发送到服务器。