任何人都可以发布一个小代码片段来保存Backbone模型到数据库。
使用jquery覆盖Backbone.sync。
这将是非常有帮助的,谢谢!
答案 0 :(得分:3)
根据经验,最好在集合和模型中显式调用AJAX,而不是使用常规Sync
。为您提供更多灵活性。以下是我们在Planbox中为待办事项列表中的任务集合所做的事情。
TaskCollection = Backbone.Collection.extend({ // Get all existing tasks from the server fetch: function(options) { var collection = this; // Remove references to callbacks so that calls further down // don't trigger them again! var onsuccess = options.success; if (options.success) delete options.success; var onerror = options.error; if (options.error) delete options.error; $.ajax({ url: '/get_tasks', type: 'GET', dataType: 'json', success: function(object, status) { collection.refresh(collection.parse(object)); if (onsuccess) onsuccess(collection, object); }, error: function(xhr, status, error) { if (onerror) onerror(collection, xhr.responseText); } } }); TaskModel = Backbone.Model.extend({ // Save a task on the server save: function(options) { var model = this; $.ajax({ url: '/save_task', type: 'POST', dataType: 'json', data: model.toJSON(), success: function(object, status) { if (options.success) options.success(model, object); }, error: function(xhr, status, error) { if (options.error) options.error(model, object.content); } } }); var tasks = new TaskCollection(); tasks.fetch();
请注意,我们假设服务器为每个任务对象吐出一个unqiue id
属性。 Backbone将使用它来识别模型。因此,您可以执行tasks.get(12)
之类的操作来检索ID为12的任务。
另请注意,在Planbox中,我们在save
和save_status
等模型上提供了更丰富的move
函数。这使我们可以灵活地添加更多的预处理和后处理,如验证和更新细节。
我们还扩展了通用的Backbone Collection和Model对象,以封装上面的获取和保存函数。
答案 1 :(得分:0)
myModel = new Model id:'model1'
$.ajax '/urlWhereUWantToSaveModel',
type: 'POST'
data: myModel.toJSON()
dataType: 'json'
success: (response) ->
// Server response should be json object with an error property if something went wrong
if response.error
console.log 'save failed'
else
console.log 'save succeeded'
error: ->
console.log 'error'