2014-05-23 47 views
0

我有以下系列:如何在取回時重寫BackboneJS中的GET參數方法?

var collection = Backbone.Collection.extend({ 
    url: '/documents/' 
}); 

當我取的,我需要RO通額外agrument到我的查詢。當我做到以下幾點:

var collection.fetch({ 
    data: { 
     key: 2 
    } 
}); 

Issied要求是:

GET: /documents/?key=2; 

但我需要使用expressjs方法來我的查詢會:

GET: /documents/key/2 

我怎麼能做到嗎?

回答

1

您可以覆蓋集合的獲取方法

var collection = Backbone.Collection.extend({ 
    fetch: function(options) { 
      if (options.data) { 
       options.url = '/documents/key/' + options.data.key; 
       delete options.data; 
      } 
      Backbone.Collection.prototype.fetch.call(this, options); 
    } 
}); 

在這裏,我們只是手動設置URL每次我們做一個fetch,並刪除該data財產的情況下場景後面的$.ajax將其帶上帶有問號的網址。在內部,當我們在模型上調用fetch(),save()和destroy(),以及在集合上調用fetch()和create()時,Backbone.sync()會發生什麼情況。

你可以看到源http://backbonejs.org/docs/backbone.html#section-141這裏:

if (!options.url) { 
    params.url = _.result(model, 'url') || urlError(); 
} 

因此,而不是用在模型url(這是依賴在模型上設置的集合,可以在源看到url型號也是如此),我們明確地設置網址。

而在最後:

var xhr = options.xhr = Backbone.ajax(_.extend(params, options)); 

正如你可以看到,現在$.ajax使用options.url代替。

+0

感謝您的幫助。 – Erik