how to use Backbone.js, but in the NO-RESTful way?

前端 未结 3 1721
野趣味
野趣味 2021-02-01 07:02

I\'m now a front-end developer, and I have a project which is fine to use BackboneJS, and the server-side is written by others. Is there anyone who can tell me how to override

相关标签:
3条回答
  • 2021-02-01 07:42

    Backbone uses Backbone.sync to manage all communication with the server. There are two important things about sync for you; first of all, it looks like this:

    The method signature of Backbone.sync is sync(method, model, [options])

    • method – the CRUD method ("create", "read", "update", or "delete")
    • model – the model to be saved (or collection to be read)
    • options – success and error callbacks, and all other jQuery request options

    and the second is that you can override sync on a per-model and per-collection basis. So you can add your own sync implementation to your model:

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

    If you look at method you can decide which URL to use and whether you're doing a GET, POST, ... request. The model will tell you what data to send to the server. You'll want to merge options into the $.ajax options you want to use. Have a look at the standard implementation of Backbone.sync, it is pretty straight forward and should show you what you need to do: just replace the URL handling and drop some of the features you don't care about (such as emulateHTTP and emulateJSON).

    0 讨论(0)
  • 2021-02-01 07:50

    The best option in your case is plugin like Backbone.service. It is Backbone service for non restful or semi restful apis.

    // 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);
    

    You can use it like this:

    var user = new User();
    user.login({ username: 'bob', password: 'secret' });
    
    0 讨论(0)
  • 2021-02-01 07:56

    Here's an example of a modified Backbone.js ajax call:

    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
        };
      }
    });
    

    From: Elijah Manor's Intro to Backbone.JS

    0 讨论(0)
提交回复
热议问题