17

我现在是前端开发人员,有一个项目很好用BackboneJS,服务端是别人写的。有没有人可以告诉我如何以非 RESTful 方式覆盖删除、更新、添加等?服务器端的 URL 可能是这样的:

  • 添加:www.domain.com/addBookById
  • 消除:www.domain.com/removeBookById

非常感谢!!

4

3 回答 3

19

Backbone 用于Backbone.sync管理与服务器的所有通信。对你来说有两件重要的事情sync;首先,它看起来像这样:

Backbone.sync的方法签名是sync(method, model, [options])

  • 方法– CRUD 方法("create""read""update""delete"
  • model - 要保存的模型(或要读取的集合)
  • options – 成功和错误回调,以及所有其他 jQuery 请求选项

第二个是您可以sync在每个模型和每个集合的基础上覆盖。因此,您可以将自己的sync实现添加到模型中:

var M = Backbone.Model.extend({
    sync: function(method, model, options) {
        //...
    },
    //...
});

如果您查看,method您可以决定使用哪个 URL 以及您是否正在执行 GET、POST、...请求。model它将告诉您要发送到服务器的数据。您需要合并options$.ajax要使用的选项中。看一下 的标准实现Backbone.sync,它非常简单,应该向您展示您需要做什么:只需替换 URL 处理并删除一些您不关心的功能(例如emulateHTTPemulateJSON)。

于 2012-11-20T06:19:59.897 回答
3

在您的情况下,最好的选择是像Backbone.service这样的插件。它是非宁静或半宁静 api 的骨干服务。

// define server targets / endpoints
var targets = {
  login: ["/login", "post"],
  signup: ["/signup", "post"],
  logout: ["/logout", "get"],
  search: "/search" // defaults to get
  resetPassword: ["/resetpassword", "post"],
  updateSettings: ["/updateSettings", "post"]
};

// standalone service
var service = new Backbone.Service({ url: "http://localhost:5000", targets: targets });

// extend backbone model
var User = Backbone.Model.extend(service);

你可以像这样使用它:

var user = new User();
user.login({ username: 'bob', password: 'secret' });
于 2015-01-20T11:49:40.923 回答
0

这是修改后的 Backbone.js ajax 调用的示例:

var Forecast = Backbone.Model.extend({
  url: function() {
    return "http://api.wunderground.com/api/7eaec3b21b154448/conditions/q/" + this.get( "zip" ) + ".json";
  },
  parse : function( data, xhr ) {
    var observation = data.current_observation;
    return {
      id: observation.display_location.zip,
      url: observation.icon_url,
      state: observation.display_location.state_name,
      zip: observation.display_location.zip,
      city: observation.display_location.city,
      temperature: observation.temp_f
    };
  }
});

来自:Elijah Manor 对 Backbone.JS 的介绍

于 2012-11-20T02:53:43.077 回答