Backbone.js的代码片段用于保存模型数据。

时间:2011-08-01 10:35:31

标签: jquery backbone.js

任何人都可以发布一个小代码片段来保存Backbone模型到数据库。

使用jquery覆盖Backbone.sync。

这将是非常有帮助的,谢谢!

2 个答案:

答案 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中,我们在savesave_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'