2011-06-21 63 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); 
}