【问题标题】:Backbone collection export issues骨干集合导出问题
【发布时间】:2013-04-08 20:41:39
【问题描述】:
我有一组用户(模型用户)
模型有一个布尔值:isExport
我有一个按钮,点击后应该将所有 isExport=true 的用户发布到服务器
谁能为这个问题提出一个合适的解决方案?
我知道可以将集合包装为模型并覆盖 toJSON 函数
但到目前为止无法管理(有人可以给出代码示例吗?)
App.User = Backbone.Model.extend({ defaults: {isExport: false}...});
App.Users = Backbone.Collections.extend({model: App.User...});
谢谢!
罗伊
【问题讨论】:
标签:
backbone.js
backbone-events
【解决方案1】:
默认情况下,Backbone 集合对服务器没有任何写入操作,因此您需要向 Collection 子类添加一个新方法,例如 doExport,使用 .where 获取带有 isExport=true 的模型和他们的toJSON() 获取一组对象,然后您可以使用Backbone.sync 或$.post 将其发送到服务器。
【解决方案2】:
Backbone 带有 RESTful 支持。
所以,如果你给每个集合一个指向集合 rest 服务的 url,那么你可以通过一些函数(创建、保存)来处理服务器请求。
App.Models.User = Backbone.Model.extend();
App.Collections.Users = Backbone.Collection.extend({
url: 'users',
model: App.Models.User
});
这样,你可以:
var users = new App.Collections.Users();
users.fetch(); // This will call yoursite.com/users
// Expecting a json request
然后你可以:
users.create({ name: 'John', isExport: true });
这将向服务器发送一个发布请求,以创建新记录。
你可以在服务器端检查它是否有你想要的标志。
【解决方案3】:
App.Views.ExportAll = Backbone.View.extend({
el: '#exportAll',
events: {
'click': 'exportAll'
},
exportAll: function(e){
e.preventDefault();
console.log('exporting all');
console.log(this.collection.toJSON());
var exportModel = new App.Models.Export;
exportModel.set("data", this.collection.toJSON());
console.log(exportModel.toJSON());
exportModel.save();
}
});
我认为这是解决问题的最佳方法