【问题标题】:how to use Backbone.js, but in the NO-RESTful way?如何使用 Backbone.js,但以非 RESTful 方式?
【发布时间】:2012-11-20 02:14:37
【问题描述】:

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

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

非常感谢!!

【问题讨论】:

  • 我现在是前端开发人员 ... 呃-哦!哈哈,开玩笑的...

标签: javascript backbone.js web


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    最好的选择在你的情况下是像Backbone.service 这样的插件。它是非 restful 或半 restful 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' });
    

    【讨论】:

      【解决方案3】:

      这是一个修改后的 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's Intro to Backbone.JS

      【讨论】:

      • 我的目的是“在传统的 RESTful 风格中,”一个资源到一个 url”,但在我的项目中,我需要考虑“在资源到不同的 url->/getxxbyxx,deletexxbyxx,”我很困惑!
      猜你喜欢
      • 2011-11-04
      • 2014-09-06
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多