2015-02-17 2 views
0

Я прочитал все сообщения на Stackoverflow относительно этого вопроса и попытался следующее:Магистраль: Как передать параметры с помощью fetch?

1) Добавление $.param({}) обертку

messages.fetch({ 
    data: $.param({ limit: 14 }), 
    }); 

2) Установка traditional в true

messages.fetch({ 
    data: { limit: 14 }, 
    traditional: true 
    }); 

3) Установка processData - true

messages.fetch({ 
    data: { limit: 14 }, 
    processData: true, 
    }); 

Несмотря на это, ни один из этих методов не работает. Что-то мне здесь не хватает?

+1

'Несмотря на это, ни один из этих методов work.' Так что же происходит именно? Вам не нужно использовать 'param',' processData' или 'традиционный'? Я предполагаю, что сообщения являются экземпляром 'Backbone.Collection'? Когда вы выбираете как 'messages.fetch ({data: {limit: 14}}), ваш запрос на сервер должен выглядеть примерно так: api/messages? Limit = 14'. Можете ли вы показать URL-адрес для этого запроса «GET»? – garethdn

+0

Вы можете легко проверить это, если вы проверите вкладку навигации консоли своего отладчика. – Trace

ответ

0

Для того, что я думаю, что вы связываете, вам нужно использовать свойство «url» для модели/коллекции. Fetch - это тип GET, а не PUT или POST, поэтому вы не отправляете «данные» на сервер. Попробуйте что-то вроде следующего:

Обратите внимание, что $ .param ({предел: 14}) возвращает «предел = 14» Дело в том, что не является допустимым Сериализованный объект, который сервер будет понять ,

Если ваш "выборки" метод является "HttpGet"

var MyModel = Backbone.Model.extend({ 

    // place holder for models api. Also look at: http://backbonejs.org/#Model-urlRoot 
    _baseUrl = 'api/somewhere/great' 

    // see: http://backbonejs.org/#Model-url 
    url: function() { 
     // this returns 'api/somewhere/great?limit=14'; 
     return this._baseUrl + '?' + $.param({ limit: 14 }); 
    } 
}); 

Теперь, если вы хотите HttpPut или HttpPost, то вы можете переопределить "выборки" и сделать что-то как следующие:

var MyModel = Backbone.Model.extend({ 

    url = 'api/somewhere/great' 

    fetch: function(options) { 
     options = options || { 
      data: { 
       limit: 14 
      } 
     }; 

     /* 
      signature method of sync: Backbone.sync = function (method, model, options) 
     */ 
     return this.sync("create", this, options); 
    } 
}); 

Ссылки:

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