2011-06-21 58 views

回答

62

另請注意,fetch支持Jquery.ajax參數,因此您可以在調用中輕鬆設置type = post。

Messages.fetch({data: {api_key: 'secretkey'}, type: 'POST'}); 

詳細參數: http://api.jquery.com/jQuery.ajax/

+0

與0.5 +我相信...我在當時使用0.3.3 – mike

+2

請注意,它會做一個標準的POST請求,而不是一個原始的JSON像默認模型默認 –

2

您可能需要擴展Collection對象以安裝自己的提取約定。這樣做,你可能會提供你自己的獲取功能。例如:

fetch : function(options) { 
    options || (options = {}); 
    var model = this; 
    var success = function(resp) { 
    if (!model.set(model.parse(resp), options)) return false; 
    if (options.success) options.success(model, resp); 
    }; 
    var error = wrapError(options.error, model, options); 
    (this.sync || Backbone.sync)('create', this, success, error); 
    return this; 
} 

它使用「創建」而不是「讀取」。乍一看,這是我首先嚐試的,儘管可能有一種更優雅的方式來做到這一點。

這種方法的缺點是,您的應用程序中基本上有框架代碼,如果框架發生更改,您可能會遇到問題。如果將此更改劃分爲單獨的圖層,可以很容易地使用新的框架版本進行更新。

+0

雖然,我沒有這條路線走,但它並幫我找出我可以專門創建集合同步方法,這樣的感謝和+1! – mike

+0

恩,謝謝。鑑於上面只有一行正在改變,並且它的行同步,似乎要寫一個自定義同步是要走的路。我沒有意識到,在同一個應用程序空間中可能會有不同的同步,但現在是有道理的。當我開始意識到這種可能性時,我已經試圖回答這個問題,勝過積極的態度。 –

2

Backbone.sync是用於通過您的模型與服務器進行交互的功能。您可以提供自己的實現,爲「讀取」方法發出POST請求,而不是GET。請參閱http://documentcloud.github.com/backbone/#Sync

+0

我原本試圖採取這種方法。我不想爲我的整個應用程序覆蓋Backbone.sync ...然後我意識到,我可以給它收集它自己的同步方法,所以我去了那條路線。謝謝.. – mike

1
try { 
    // THIS for POST+JSON 
    options.contentType = 'application/json'; 
    options.type = 'POST'; 
    options.data = JSON.stringify(options.data); 

    // OR THIS for GET+URL-encoded 
    //options.data = $.param(_.clone(options.data)); 

    console.log('.fetch options = ', options); 
    collection.fetch(options); 
} catch (excp) { 
    alert(excp); 
}