2015-07-22 87 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