2015-07-22 74 views
0

有没有什么办法可以创建自己的ajax方法来发出POST请求而不是使用save?Backbone.js自定义模型请求

+0

可以,但有辩论至于是否这是一个不错的办法。查看http://stackoverflow.com/questions/11331604/backbone-js-ajax-calls进行更详细的讨论。 – snozza

+0

简单的方法是使用'$ .ajax'和'type = post'来代替主干模型。你为什么想要这样做呢? – AdityaParab

+0

我已经找到了解决方案。非常感谢你。 – mmontes11

回答

0

保存不仅会触发AJAX请求,而且会触发事件和验证,所以我不会写我自己的“保存”方法。 但是,你总是可以写像模特功能:

var SomeModel = Backbone.Model.extend({ 
    urlRoot: "/some/url", 
    altSave: function() { 
     $.post(this.urlRoot, { 
      /*assemble your post data*/ 
     }, function (response) { 

     }); 
    } 
}); 

var s = new SomeModel(); 
s.altSave(); 

调用s.altSave();将触发一个POST请求。

0

这是正确的,它的作品,但我认为这是一个更好的解决方案:

'use strict'; 

define([ 
    'underscore', 
    'backbone', 
    'config/appConfig' 
],function(_,Backbone,Config){ 

    var StatsModel = Backbone.Model.extend({ 
     urlRoot: Config.urlStats, 
     url: function() { 
      var url = this.urlRoot + "/resource"; 
      return url; 
     }, 
     defaults: { 
      metricID: '', 
      groupByID: '' 
     }, 
     requestStats: function(opts) { 
      var url = this.url(), 
       options = { 
        url: url, 
        type: 'POST', 
        contentType: 'application/json', 
        data: JSON.stringify(this.attributes) 
       }; 

      _.extend(options, opts); 

      return (this.sync || Backbone.sync).call(this, null, this, options); 
     } 
    }); 
    return StatsModel; 
}); 

非常感谢您

+0

不,因为:1.它覆盖了'Backbone.Model'的默认'url',这是不必要的,2.'Backbone.sync'的底层实现可能会改变,3.您必须挖掘Backbone源才能知道'return(this.sync || Backbone.sync).call(this,null,this,options)''真的发生了什么?你今天可能会知道,但几个月后你就会伪造它,想象新的开发者会发生什么。我的解决方案更直接,开发人员更友好,并且不需要您深入图书馆的来源。如果您关心编写可维护的代码,请使用它。 –

+0

确实,你是对的。 – mmontes11