2015-02-07 84 views
0

基於互聯網上發現的大量資源,我試圖創建自定義模型操作,它發送POST /api/v1/users/subscribe請求。我的代碼如下所示:定製Backbone.Model操作不起作用

@UserModel = Backbone.Model.extend 
    urlRoot: '/api/v1/users' 

    subscribe: (opts) -> 
    url = "#{@urlRoot}/subscribe" 
    options = 
     url: @url 
     method: 'POST' 
    _.extend @options, opts 

    return (@sync or Backbone.sync).call this, null, this, @options 

然而,當使用它,如下所示:

user = new UserModel 
user.subscribe() 

使它個GET /api/v1/users請求。你能解釋我的代碼有什麼問題嗎?幾乎所有關於自定義方法的例子都是這樣的:https://gist.github.com/sap1ens/4692429,我的代碼就是它的一個確切的端口。

預先感謝

+0

只是代碼檢查。你確定要按這個順序「_.extend @options,opts」嗎?一般來說,默認選項(在你的情況下'opt')是被重寫的。所以你想要做'opts = opts || {}''_.extend opts,@ options'。 – seebiscuit 2015-02-08 13:23:42

+0

原來是一個coffe - > js編譯問題,因爲使用提供的gist代碼的js文件效果很好。但是,我仍然不知道爲什麼它不能用咖啡工作。 – mbajur 2015-02-08 17:13:19

回答

2

backbonejs.org選項 - 成功和錯誤回調,和所有其他的jQuery請求選項

的Backbone.sync方法的選項參數,接受jquery請求選項。要指定請求的類型,正確的jquery選項是'type'(jQuery.ajax)。下面的代碼工程

var UserModel = Backbone.Model.extend({ 
    urlRoot: '/api/v1/users', 
    subscribe: function (opts) { 
     var url = "this.urlRoot/subscribe" 
     var options = { 
      url: url, 
      type: 'POST' 
     }; 
     _.extend(options, opts); 

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

user = new UserModel(); 
user.subscribe(); 

P.S .:我不擅長咖啡劇本,所以粗略地把它翻譯成普通的js。

+0

好吧,它似乎是由咖啡導致的某種故障 - > js解碼導致你的代碼工作得很好,而我的,即使'method'改爲'type',發出** GET **請求完全錯誤網址。我不能接受你的answear,因爲這不是我的問題的直接解決方案,但非常感謝你指出這個問題! Upvoting :) – mbajur 2015-02-07 19:50:01

1

請注意url: @url,_.extend @options, opts中的@和您的退貨聲明。請記住Coffescript會將@編譯成this

@UserModel = Backbone.Model.extend 
    urlRoot: '/api/v1/users' 

    subscribe: (opts) -> 
    url = "#{@urlRoot}/subscribe" 
    options = 
     url: url 
     type: 'POST' 
    _.extend options, opts 

    return (@sync or Backbone.sync).call @, null, @, options