Backbone.js Model different url for create and update?

后端 未结 5 1358
情书的邮戳
情书的邮戳 2020-12-22 19:07

lets say I have a Backbone Model and I create an instance of a model like this:

var User = Backbone.Model.extend({ ... });
var John = new User({ name : \'Joh         


        
5条回答
  •  攒了一身酷
    2020-12-22 19:40

    I got inspired by this solution, where you just create your own ajax call for the methods that are not for fetching the model. Here is a trimmed down version of it:

    var Backbone = require("backbone");
    var $ = require("jquery");
    var _ = require("underscore");
    
    function _request(url, method, data, callback) {
      $.ajax({
        url: url,
        contentType: "application/json",
        dataType: "json",
        type: method,
        data:  JSON.stringify( data ),
        success: function (response) {
          if ( !response.error ) {
            if ( callback && _.isFunction(callback.success) ) {
              callback.success(response);
            }
          } else {
            if ( callback && _.isFunction(callback.error) ) {
              callback.error(response);
            }
          }
        },
        error: function(mod, response){
          if ( callback && _.isFunction(callback.error) ) {
            callback.error(response);
          }
        }
      });
    }
    
    var User = Backbone.Model.extend({
    
      initialize: function() {
        _.bindAll(this, "login", "logout", "signup");
      },
    
      login: function (data, callback) {
        _request("api/auth/login", "POST", data, callback);
      },
    
      logout: function (callback) {
        if (this.isLoggedIn()) {
          _request("api/auth/logout", "GET", null, callback);
        }
      },
    
      signup: function (data, callback) {
        _request(url, "POST", data, callback);
      },
    
      url: "api/auth/user"
    
    });
    
    module.exports = User;
    

    And then you can use it like this:

    var user = new User();
    
    // user signup
    user.signup(data, {
      success: function (response) {
        // signup success
      }
    });
    
    // user login
    user.login(data, {
      success: function (response) {
        // login success
      }
    });
    
    // user logout
    user.login({
      success: function (response) {
        // logout success
      }
    });
    
    // fetch user details
    user.fetch({
      success: function () {
        // logged in, go to home
        window.location.hash = "";
      },
      error: function () {
        // logged out, go to signin
        window.location.hash = "signin";
      }
    });
    

提交回复
热议问题