2012-03-06 2 views
1

У меня есть настройка API, которая использует типы носителей в заголовке Accept для всех запросов. Приступая к работе, я просто просто обернул функции извлечения и сохранения моделей, но мне было любопытно, есть ли лучший способ, а не делать это в каждой модели и коллекции?Типы носителей во всех backbone.js запросах REST

Update

var accountsCollection = Backbone.Collection.extend({ 
    model: accountModel, 
    url: '/api/accounts', 
    vnd: 'application/vnd.app.AccountFeed+json', 
    return resp.Items; 
    }, 
    search: function (q) { 
     this.fetch({ 
      headers: { Accept: this.vnd }, 
      data: { 
       q: q 
      }, 
      success: function (data) { 
       //console.log(q); 
      } 
     }); 
    } 
}); 

Как и в приведенном выше примере, у меня обернуть выборки из-за необходимости иметь пользовательский Accept заголовок. На мой взгляд, идеальным решением было бы увеличить выборку & save, чтобы автоматически потянуть значение vnd коллекции или модели. Надеюсь, это лучше пояснит, о чем я просил.

ответ

2

Магистраль использует понятие sync adapter, чтобы настроить работу CRUD. Каждая коллекция/модель может иметь свой собственный метод синхронизации, который может применять ваш пользовательский адаптер HTTP.

Ваш код может выглядеть следующим образом:

var MyModel = Backbone.Model.extend({ 
    sync: function(method, model, options) { 
     var options = options || {}; 
     options.Accept = model.vnd; 
     return Backbone.sync(method, model, options); 
    } 
}); 
+0

+1 Хорошая настройка – rjz

+0

Спасибо за помощь ... @ rjz тоже. Я считаю, что у меня есть идея, что мне нужно изменить, чтобы заставить его работать. Ценить это. – Seth

2

риффов от ответа узи, вы могли бы также рассмотреть вопрос о предоставлении своей собственной Backbone.sync функции. Model.fetch() заканчивается делегированием функции über-sync, что означает, что патч для включения заголовка Accept обеспечит передачу заголовка вместе с каждым запросом, которое делает ваше приложение.

Хороший пример изменения Backbone.sync можно найти в annotated source демонстрационной версии Backbone/localStorage.

Смежные вопросы